一箕母、為什么使用aar打包储藐,而不是jar
隨著Android Studio的使用越來越廣泛俱济,使用aar打包這種方式也越來越可行實際。jar打包只打源代碼钙勃,像資源文件不會打包蛛碌,而aar恰恰是jar打包的補充完善,它會把代碼和資源統(tǒng)統(tǒng)打包進一個文件辖源。
二蔚携、資源命名問題
既然需要打包為sdk提供出來使用,那就要打包得有水準一點克饶。別把常用的第三方的jar集成到aar里面酝蜒,這樣很容易會造成沖突的。
(1)aar中有依賴的架包
①依賴的第三方資源最好是使用jcenter遠程倉庫的依賴彤路,如果遠程倉庫上沒有秕硝;例如下載的類庫,直接使用compile進行依賴洲尊。
compile 'com.dou361.download:jjdxm-download:1.0.1'復制代碼
②自己上傳一個到jcenter遠程倉庫上远豺,學習下打包aar到jcenter也是很有必要的;例如經(jīng)常用到的微信分享登錄的架包libammsdk.jar坞嘀,打包到jcenter上,以后項目中需要用到就添加以下代碼即可:
compile 'com.dou361.winchat:jjdxm-winchat:1.0.0'復制代碼
③當然了丽涩,如果你實在是嫌麻煩那就直接打包到aar上,如果APP中引用別的aar和你的aar有相同的架包那就悲劇了继准,不過還是有解決的辦法,后面會有相關的處理辦法移必。
(2)資源命名
資源命名最好通通加上你的項目名字前綴毡鉴,比如圖片資源、string猪瞬、color、dimens幌甘、layout等等,反正res目錄下所有文件最好都使用統(tǒng)一的加前綴命名饲做,防止跟宿主app下的資源重復遏弱,因為aar引用跟源碼引用起到的效果一樣一樣的,所有很容易出現(xiàn)資源重復引用的問題泪姨,因此加上前綴非常有必要饰抒。可以有效避免架包內部部分內容沖突的尷尬情況袋坑。
三、jar第三方庫重復引用問題
同一個項目下多次引用同一個第三方jar庫會出現(xiàn)重復引用的編譯問題婆誓,所以只要保證引用一次就ok了也颤,但是如果你的庫引用的第三方庫比較多時,就會碰到很尷尬的問題文留。
比如你的aar庫引用了一個第三方庫竭沫,這個庫是本地庫,宿主app中也引用了這個第三方庫蜕提,這時你把你的aar庫所引用的那個第三方庫引用方式設置成provide,provide的意思是不打包進去,這樣沒問題躲查,但是你想過一個問題沒,如果別人使用你的aar姐霍,他不知道你的aar庫需要包含那個第三方庫,如果他在自己的宿主app中沒有引用進來那個庫胯府,好吧恨胚,這會導致運行時崩潰,崩潰的日志提示找不到一些類定義寒波,總不能給別人提供aar庫還要額外提供一堆第三庫升熊,然后告訴他把這些庫添加進主工程里,這種方式可行级野,但是很不友好。
以下是第三方庫重復引用沖突解決方法:
1.本地libs目錄中的jar和遠程倉庫中compile的jar沖突辰企。
解決辦法優(yōu)先刪除libs目錄中的jar保留compile的引用渊抽,也可以刪除compile引用保留本地libs目錄的。
2.本地libs目錄中兩個jar十减,遠程倉庫compile兩個jar或者本地libs目錄和遠程倉庫compile之間的同一jar不同版本沖突愤估。
解決辦法優(yōu)先刪除低版本的保留高版本的,其次是優(yōu)先刪除本地libs的保留compile的由驹。這個要根據(jù)APP的情況而定昔园,保留高版本的jar可能會引起原來其他地方引用低版本方法變遷或者路徑變更出問題,在兩者間擇優(yōu)甥郑,同步升級其他相關jar的版本荤西,或者同步降級其他相關jar的版本伍俘。
3.引用jar和jar勉躺、aar和jar或者aar和aar的沖突。
解決辦法優(yōu)先刪除jar的引用妨退,保留aar的概说,如果兩個都是aar或者兩個都是jar怎么辦?當然也是可以刪除aar或者jar內部中沖突的
(1)aar中沖突的部分是集成到aar中的糖赔,這種情況是比較多,如果是遠程倉庫的需要下載下來逝变,改為本地引用奋构,有人可能不會下載,其實原來你使用遠程倉庫引用同步以后已經(jīng)是下載好在本地的了宴咧,這里舉一個案例:
compile 'com.dou361.update:jjdxm-update:1.0.3' 復制代碼windows系統(tǒng) C:\Users\你的計算機用戶名.gradle\caches\modules-2\files-2.1目錄下找到compile的groupId com.dou361.update文件径缅,完整的目錄:
C:\Users\Admin.gradle\caches\modules-2\files-2.1\com.dou361.update\jjdxm-update\1.0.3\fb8f27de2ce0371476023b1dcf4a6096d19e5810\jjdxm-update-1.0.3.aar復制代碼 復制出來用即可,本地的libs中的aar氧卧,其實就是一個壓縮包氏堤,用解壓工具打開把沖突的部分刪除即可;引用如下:
repositories {
flatDir {
dirs 'libs'
}
}
compile (name:'jjdxm-update',ext:'aar')復制代碼
(2)jar中沖突的部分是jar內部部分內容闪檬,和第(1)的處理方法類似购笆,這里要是沒有說可能會想不到,jar包其實也是一個壓縮包,因此內部的沖突的內容是可以通過解壓工具打開去刪除的。
(3)如果沖突的jar是采用遠程依賴方式引用铭乾,那就可以直接使用代碼去屏蔽沖突的部分
例如:
compile ('com.dou361.update:jjdxm-update:1.0.3'){
exclude group: 'com.dou361.download',module:'jjdxm-download'
}
復制代碼
(4)比較極端的情況娃循,部分類文件目錄名稱重復,但是兩邊的方法功能不一樣笛质,通過解壓工具刪除兩邊重復的內容捞蚂,然后新建一個目錄相同名稱相同的類到自己的主應用程序中,把兩邊的功能都實現(xiàn)在新建的這個類中姓迅。