最近由於項目的要求,須要把開發的模塊打包成aar,供其餘項目調用,在搞了一段時間後,發現這裏仍是有不少須要注意的地方,因此記錄一下,幫助你們不要走彎路。android
首先何爲aar包? 微信
jar與aar的簡單區別:app
1.新建Library 佈局
而後一路next+finish就新建成功了微信支付
將要打包的文件都按照文件夾的位置放入你的Module中,而後直接點擊build-->Make Moudle app 打包成功後會在對應的路徑下生成aar gradle
固然了,這些應該應該都不是咱們須要的, 由於開發項目中必定會有所依賴的。 並且也確定不是空的項目。ui
咱們能夠直接在項目中New一個Moudle 而後把項目複製到Moudle中,或者從新複製出來一個當前項目,而後在複製的項目中直接把此項目修改爲AAR。3d
我就說一下第二種把,也就是把複製項目直接修改爲AAR,咱們須要作以下改動: 1. 修改app下的bulid gradle文件: 把apply plugin: 'com.android.application'修改爲apply plugin: 'com.android.library' 指針
2. 註釋調defaultConfig下的applicationId code
3.AndroidManifest.xml文件,修改application
而且註釋調首先啓動的Activity啓動的action
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
4.若是你本身自定義了Application,須要去掉,由於AAR中是沒有Application的,那問題來了,咱們原來在Application中的初始化代碼怎麼辦?這個簡單,咱們能夠單獨寫一個Options類,提供給調用者,讓他傳遞過來application,這樣咱們就能夠在這個類中作一些初始化操做了。
調用者在他的application中傳入application:
而後直接build-->Make Moudle app 就能夠生成aar了!
1. 主項目須要依賴AAR中所依賴的遠程庫,不然會出現ClassNotFound異常 這裏也許某個依賴庫大家的版本會發生衝突,這就須要大家協調了
2. 資源命名最好通通加上你的項目名字前綴,好比圖片資源、string、color、dimens、layout等等,反正res目錄下全部文件最好都使用統一的加前綴命名,防止跟宿主app下的資源重複,由於aar引用跟源碼引用起到的效果同樣同樣的,全部很容易出現資源重複引用的問題,因此加上前綴很是有必要。
3. 若是該aar包裏面有微信支付,分享等第三方庫,你要在主工程中使用,要記得在gradle裏面替換applicationId,或者用你主工程的包名和key去獲取第三方操做的key和id
以分享爲例,若是你清單文件中的分享KEY與主項目中的build gradle文件中的分享KEY不一樣的話,就會包清單文件異常的。
4. butterknife須要統一用8.4.0以上的版本,否則報錯 ;依個人建議,最好不用,不然有你好受的哈! 5. 若是在aar的MyAppliction裏面使用了類的管理器,那麼在打包成aar的時候須要將代碼抽出來作個獨立的類管理器,記住一點,打包成aar以後全部和application有關的東西都要檢查替換,避免出現空指針異常。 6. AAR模塊用butterknife須要把資源R改成R2(批量替換) 7. 佈局文件不要重名,不然會報找不到Id的異常
今天就分析到這裏,下次繼續新內容!