Android Studio NDK開發 正確調用jni 及加入第三方so庫需要注意的問題 .

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庫了

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