Android Studio NDK開發 正確調用jni 及加入第三方so庫需要注意的問題
首次使用Android Studio進行NDK開發會遇到很多問題, 我在此將自己的經驗分享給大家
直接上配置比較直觀
下面是在項目 app源根文件夾下build.gradle文件的配置, 都寫明瞭註釋
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.lance.ndkexample" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" // 不聲明ndk標籤,項目默認會創建一個libapp.so的文件 ndk { // 聲明創建so庫的文件名,會自動添加lib前綴, 添加了前綴,不會自動添加 moduleName "MathKit" //聲明啓用Android日誌, 在c/c++的源文件中使用的#include <android/log.h> 日誌將得到輸出 ldLibs "log" // 聲明創建指定cpu架構的so庫, 不聲明的話, 默認(gradle 1.5.0)會生成4中架構 多一種mips架構 // 具體cpu架構的區別請參考: // for detailed abiFilter descriptions, refer to "Supported ABIs" @ // https://developer.android.com/ndk/guides/abis.html#sa abiFilters "armeabi", "armeabi-v7a", "x86" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { // 1. 配置在根目錄libs下可以加載第三方so庫, (最好不要創建jniLibs, 在衆多的開源庫中可能會引起衝突,還沒發現) // 2. 運行時會自動將libs目錄下的so庫拷貝到指定目錄 // 3. 如果自己創建的so不需要重新編譯,可以將(app/build/intermediates/transforms)生成的so拷貝到這個目錄 jniLibs.srcDirs = ['libs']
// 如果是單個文件夾 可以直接這樣如下配置
// jniLibs.srcDir 'libs'
} }}
另外還有幾處需要配置
項目根文件夾下的gradle.properties文件中添加如下配置(解決AS中NDK插件過時不能編譯的問題)
android.useDeprecatedNdk=true
local.properties 文件中添加idk所在路徑, 與添加sdk文件夾路徑一樣的做法
ndk.dir=/Apache/android-ndk-r10b
這裏需要注意sourceSets節點的配置, 用於配置so庫加載的位置
如果不配置的話Android Studio默認的加載位置在java 同級目錄 jniLibs, 沒有的話需要手動創建, 將對應cpu架構的so放到對應的目錄
項目基本上都能順利調用so庫了
然後就木有然後了