天天看點

Android為别人提供SDK、aar時踩過的坑。

Android為别人提供SDK、aar時踩過的坑。

最近項目中的某些功能需要為第三方提供一個SDK,android這邊使用aar包的形式提供出去。

在內建的過程中,踩過了一些坑,自己也花了很長的時間來解決這些坑,在此記錄下,以後好翻閱。若有碰上同樣錯誤的有緣人,也可參考。

(暫且将內建我們sdk的應用稱為宿主)

1.坑:宿主應用名稱變成提供的aar包中的module名了

解:宿主的androidmanifest.xml中的應用名是string/app_name,應用名被我們module中Strings.xml中的app_name覆寫了。要麼宿主改個字段名,要麼我們module中的strings中的app_name改一下。

2.坑:宿主應用與SDK主題不一緻,導緻運作崩潰

錯誤描述為:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

解:宿主使用的是Activity的Theme,而我們應用使用的是APPCompatActivity,Theme不同不能運作,要麼我們的Activity繼承Activity,如果實在不好改成繼承Activity,那麼在我們module的AndroidManifest.xml檔案中在對應Activity的節點中添加AppCompatActivity的Theme。

3.坑:aar中的jar包或者第三方架構與宿主應用中的jar包或源碼沖突

解:嘗試使用了exclude{}等方式,均無效。後來使用provided字段解決。

若使用api ‘xxx.jar’依賴jar包,則改成provided ‘xxx.jar’,provided能保證引用但不打入包中。

若使用api ‘com.xx.xx’依賴第三方庫,則同樣改成provided。

若使用了implementation fileTree(dir:‘libs’,include:[’*.jar’])這種,也可以改為provided字段,保證不把三方架構打入包中,防止沖突。

4.坑:有時會碰到android.view.InflateException: Binary XML file line #16 in 問題,找不到aar中的控件。

解:我們這邊的項目是因為lib中的aar,宿主應用漏加了幾個,導緻運作失敗。是以這邊提供出去的aar在宿主那邊一定要全部加上。不然會出現很難排查的問題。

先記錄這麼多吧,踩坑掉頭發。