开发环境
Mac OSX 10.11.2
Android Studio 2.1
NDK-r11c
准备工作

Mac系统需要在~/.bash_profile文件中配置NDK_PROJECT_PATH,如下:
export NDK_PROJECT_PATH=../ndk/android-ndk-r11c #你的ndk目录
export PATH=$NDK_PROJECT_PATH:$PATH
# 执行 source ~/.bash_profile 使之生效
source ~/.bash_profile
集成到Android Studio 中
- 新建一个Android工程
NDKTest - 添加
android.useDeprecatedNdk=true到app下的gradle.properties中 - 在
Project Structure->SDK Location->Android NDK Location中指定NDK的路径;或者直接在local.properties文件中指定ndk.dir,最终该文件内容为:
ndk.dir=../ndk/android-ndk-r11c
sdk.dir=../sdk
- 在
main文件夹下创建一个JNI Folder - 添加如下
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'
}
- 创建一个
NDKTest类,加载库并声明native方法:
package com.lichfaker.ndktest;
public class NDKTest {
static {
System.loadLibrary("ndk-test");
}
public static native String getString();
}
- 此时方法
getString()是有错误提示的,按下alt+enter创建native方法(如果之前没有指定sourceSets.main则这里具体方法无法创建成功)如下:
- 定义
const char * returnValue = "Hello Jni";并在Activity中调用NDKTest.getString()
运行测试
- 运行测试抛出了异常:
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']
}
- 重新打包运行,成功显示
Hello Jni_

