關于安卓打包生成aar,jar方式
背景
在開發的過程中,主項目引入三方功能的方式有很多,主要是以下幾個方面:
(1)直接引入源代碼module(優點:方便修改源碼,易于維護,迭代。缺點:對于新手不友好,可能會遇到依賴兼容問題,需要排除并且適配)
(2)遠程依賴,目前主要是用maven依賴。(優點:幾行代碼即可依賴完成。缺點,庫存在問題的話,修改很麻煩)
(3)直接引入jar或者aar。(module編譯后的產物,優點:可增加混淆之類的規則,使代碼更安全,隱蔽。缺點:本地修改會有難度,編譯有一定的難度)
本文,就是講述,如何使用androidstudio打包生成aar,jar。
環境
win10
jdk 11
jdk 8
as 4.0+
gradle 7.0+
編碼
首要要搞懂,aar包和jar包有什么區別?很簡單來說,aar包是在jar包上,增加了資源,例如layout,res。
如果你開發的是一個純業務類型的庫,可以打jar包。如果涉及到界面等邏輯,就需要打aar包了。
(一)生成aar包
首先,要有個androidstudio中的module。然后clean project,build project即可生成。具體目錄,就是在module對于的build項目下查找,即可看到,結構如下圖:
那么,又是如何生成release的aar包呢?
只需要點擊右側邊欄的gradle->對應模塊->other->assembleRelease,等待編譯完成即可,編譯后內容如下圖:
上述就是一些關于model如何生成一個aar包的操作。
(二)生成jar包
對于生成一個jar包,比aar包要復雜一點。需要在模塊目錄的build.gradle文件,加入以下代碼:
task makeJar(type: Copy) {//刪除存在的delete 'build/libs/ztuiqueue.jar'//設置拷貝的文件from('build/intermediates/aar_main_jar/release/')//打進jar包后的文件目錄into('output/libs/')//將classes.jar放入build/libs/目錄下 //include ,exclude參數來設置過濾 //(我們只關心classes.jar這個文件)include('classes.jar')//重命名rename('classes.jar', 'ztuiqueue.jar')
}
makeJar.dependsOn(build)
其中,函數from中的路徑,是隨著gradle的版本不一樣二變化的。需要在build目錄下進行查找。
上述代碼的意思,僅僅是把jar包復制出來,其實原jar包的目錄是在比較深的層級的。
(三)代碼混淆
對于完成了(一)(二)兩步的朋友,現在已經接近尾聲了。最后就是一個代碼混淆的問題。如果不涉及混淆,請忽略該步驟。
對于module中的打包aar/jar代碼混淆,需要在build.gradle文件中,buildTypes路徑下,加入以下代碼即可:
buildTypes {release {minifyEnabled true/*模塊混淆*/consumerProguardFiles 'proguard-rules-libxui-queue.pro'/*打包aar,jar混淆*/proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'}debug {minifyEnabled false/*模塊混淆*/consumerProguardFiles 'proguard-rules-libxui-queue.pro'/*打包aar,jar混淆*/proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'}}
其中,很清晰明了的一句,就是 /打包aar,jar混淆/
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules-libxui-queue.pro'
而“proguard-rules-libxui-queue.pro”請替換成你開發module的具體混淆文件名字即可。
上述代碼的意思就是,如果是正式包,則開啟混淆,測試包則不開啟。當然,主項目的混淆狀態也會直接影響子module的混淆狀態。
注意
混淆的過程中,需要遵循對應的混淆原則。否則會出現無法識別的情況。
還有,對外的輸出的jar包,aar包,也應該附帶對應的混淆規則說明。
that‘s all-------------------------------------------------------------------------------