前言
一般我們開發的android sdk(arr)使用了jni後,aar中只會包含動態庫的(so文件),所以以前一直沒有注意與處理過android平臺上的靜態庫的打包。今天嘗試了一下,有遇到了一直打不出.a文件和aar構建出來後沒有.a文件的問題,後來通過搜索找到了不明原因的解決方案。後續需要弄清楚原因和撐握相關的知識點。
方案
1、CMakeLists.txt文件,把庫的打包類型改爲STATIC
2、需要在build.gradle 文件的nativeBundleExport配置上加上bundleStatic
3、需要在build.gradle 文件的externalNativeBuild配置上加上targets
//CMakeLists.txt文件
add_library( # Sets the name of the library.
庫名
# Sets the library as a shared library.
STATIC
# Provides a relative path to your source file(s).
src/main/jni/xxx.cp)
// build.gradle文件
nativeBundleExport {
bundleStatic = true //加上了可以在aar才加包含打出來的.a文件
}
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang', "-DANDROID_STL=c++_static"
cppFlags "-std=c++11 -frtti -fexceptions"
abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
targets '庫名' //加上了可以編譯出.a文件
}