NDK開發(fā)(一)——AS中配置環(huán)境

開發(fā)環(huán)境

Mac OSX 10.11.2
Android Studio 2.1
NDK-r11c

準備工作

  1. 下載并解壓NDK, 官網(wǎng)下載,歷史版本

  2. 添加到PATH中
    該操作不是必須的,如果通過命令ndk-build的方式手動編譯的話則最好配置環(huán)境變量。初次執(zhí)行ndk-build會提示:

Mac系統(tǒng)需要在~/.bash_profile文件中配置NDK_PROJECT_PATH,如下:

export NDK_PROJECT_PATH=../ndk/android-ndk-r11c #你的ndk目錄
export PATH=$NDK_PROJECT_PATH:$PATH
# 執(zhí)行 source ~/.bash_profile 使之生效
source ~/.bash_profile

集成到Android Studio 中

  1. 新建一個Android工程NDKTest
  2. 添加android.useDeprecatedNdk=true到app下的gradle.properties
  3. Project Structure->SDK Location->Android NDK Location中指定NDK的路徑;或者直接在local.properties文件中指定ndk.dir,最終該文件內(nèi)容為:
ndk.dir=../ndk/android-ndk-r11c
sdk.dir=../sdk
  1. main文件夾下創(chuàng)建一個JNI Folder
  2. 添加如下gradle配置:
defaultConfig {
    ...
    ndk {
        // 模塊名稱
        moduleName = "ndk-test"
        // 指定編譯平臺,更多平臺信息 參見https://developer.android.com/ndk/guides/abis.html#sa
        abiFilters "armeabi", "armeabi-v7a"
    }
}
sourceSets.main {
    // 你的源碼目錄
    jni.srcDir 'src/main/jni'
}
  1. 創(chuàng)建一個NDKTest類,加載庫并聲明native方法:
package com.lichfaker.ndktest;
public class NDKTest {
    static {
        System.loadLibrary("ndk-test");
    }
    public static native String getString();
}
  1. 此時方法getString()是有錯誤提示的,按下alt+enter創(chuàng)建native方法(如果之前沒有指定sourceSets.main則這里具體方法無法創(chuàng)建成功)如下:
  2. 定義const char * returnValue = "Hello Jni";并在Activity中調(diào)用NDKTest.getString()

運行測試

  1. 運行測試拋出了異常:
    java.lang.UnsatisfiedLinkError: Couldn't load ndk-test from loader dalvik.system.PathClassLoader...
    猜測可能是運行平臺的原因,于是使用真機測試,但是然并卵...
    于是google之,終于找到了原因:
    原來gradle默認是將編譯好的so文件放到libs目錄下的, 而我們加載Library的時候默認是去main->jniLibs下查找的。
    我這是修改了jniLibs的默認路徑為libs
sourceSets.main {
    // 你的源碼目錄
    jni.srcDir 'src/main/jni'
    jniLibs.srcDirs = ['libs']
}
  1. 重新打包運行,成功顯示Hello Jni _
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容