NDK开发(一)——AS中配置环境
2016-06-14 本文已影响2475人
LichFaker
开发环境
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
_