android aar 包含靜態庫的打包

前言

一般我們開發的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文件
            }

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章