### 簡介 最近因為項目的要求,需要把開發的模塊打包成aar,供其他項目調用,在搞了一段時間后,發現這里還是有很多需要注意的地方,所以記錄一下,幫助大家不要走彎路。 **首先何為aar包?**  jar與aar的簡單區別: - *.jar:只包含了class文件與清單文件 ,不包含資源文件,如圖片等所有res中的文件。 - *.aar:包含所有資源 ,class 以及 res 資源文件全部包含 ### 新工程(無依賴)打包AAR的步驟 1.新建Library   然后一路next+finish就新建成功了 將要打包的文件都按照文件夾的位置放入你的Module中,然后直接點擊build-->Make Moudle app  打包成功后會在對應的路徑下生成aar  當然了,這些應該應該都不是我們需要的, 因為開發項目中一定會有所依賴的。 而且也肯定不是空的項目。 ### 成型的項目(有依賴)如何快速打包AAR 我們可以直接在項目中New一個Moudle 然后把項目復制到Moudle中,或者重新復制出來一個當前項目,然后在復制的項目中直接把此項目修改成AAR。 我就說一下第二種把,也就是把復制項目直接修改成AAR,我們需要做如下改動: **1.** 修改app下的bulid gradle文件: 把apply plugin: 'com.android.application'修改成apply plugin: 'com.android.library'  **2.** 注釋調defaultConfig下的applicationId  3.AndroidManifest.xml文件,修改application  並且注釋調首先啟動的Activity啟動的action ```
``` 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的異常 今天就分析到這里,下次繼續新內容! 