Android-打包AAR步驟以及最為關鍵的注意事項!
簡介
最近因為專案的要求,需要把開發的模組打包成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
<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的異常
今天就分析到這裡,下次繼續新內容!
