android studio生成和使用jar包
1. 生成jar
因為專案需求,需要把android程式碼生成jar包,供別人使用
在我除錯階段,我的android程式碼是app形態的,要想生成jar包,首先就要修改app下build.gradle的第一行(其實就和c++工程中cmake配置add_execute改成add_library類似,我們是為了生成庫,不是二進位制程式):
apply plugin: ‘com.android.application’ 改成 apply plugin: ‘com.android.library’
同時,這行程式碼需要註釋掉:
或者,重新在當前工程中建立一個module,選擇生成lib方式,然後把app module中的java原始檔、依賴的jar檔案、native c++檔案、native so庫都拷貝到lib module中,配置該lib module 的gradle,生成jar,也是可以的。(本質就行把當前app module映象了一份,這不過這次是生成lib)
剩下的工作就是在build.gradle中增加生成jar的task,例如:
task makeJar(type: Copy) {
//刪除之前的lib包
delete 'build/libs/newlib.jar'
//jar檔案來源
from('build/intermediates/packaged-classes/release/')
//生成路徑
into('build/libs/')
include('classes.jar')
//命名為network.jar
rename ('classes.jar', 'newlib.jar')
}
makeJar.dependsOn(build)
原理很簡單,android studio 3.4.x預設會在build/intermediates/packaged-classes/release下面生成classes.jar檔案,這個task的作用就是把該jar檔案移動下位置,改個名字。
然後雙擊AS右側gradle工具下的makeJar(或通過gradlew命令等方式)就可以在指定目錄下生成該jar檔案了。
2. 使用jar
- 把生成的jar匯入到其他工程中
- 如果原來的jar工程包含了native程式,並且依賴了其他native c++ so庫,那麼很簡單,把jni生成的so和三方c++ so也放到其他工程對應的lib目錄下,就可以正常使用。在呼叫jar中的native方法時,會自動去找三方c++ so。例如,我是把jar對應的so庫放到了這裡:
3. 問題記錄
build jar過程中提示找不到x86_64庫。。
解決方法:
設定abifilters。因為我本身只需要build arm64-v8a平臺,所以在abifilters中設定了該平臺的filter,這樣後續在其他build過程中只會針對該平臺進行build,不會存在找不到x86-64庫之類的問題了(畢竟此時系統只考慮arm64-v8a平臺了)
4. 參考
- android so庫、jar包生成和使用
- 使用Android Studio打包生成Jar包的方法(親測可用)
- 利用android studio生成jar包,製作自己的SDK
- Android Studio正確新增so庫的兩種方式(利用sourceSets去指定c/c++ so庫路徑)