文章转载至:点击跳转原文
1 你需要做的
- 更新你的Android studio到2.2或更高版本
- 下载Android NDK version 11r或更高
- 更新Android SDK Tools到最新版
2 创建测试项目
- 选择New Project然后一路Next之后Finish即可
配置项目使用gradle wrapper,如下图选择Use Default Gradle wrapper (recommended)即可
下载NDK,如下图选择SDK Manager>SDK Tools>Android NDK(也可能叫NDK)
- 点击按钮Sync Project>Make Project>Run,现在还看不到什么效果
3.更新Gradle文件
- 打开build.gradle(Project:XXX)文件,应该是类似下图
- 我们需要替换
classpath 'com.android.tools.build:gradle:2.1.0'
为
classpath 'com.android.tools.build:gradle-experimental:0.7.2'
- gradle-experimentalv0.7.0之后需要 gradle版本在2.10或更高,所以换需要打开gradle-wrapper.properties 文件进行修改(依版本而定,或许你并不需要更改)
替换
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
为
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
- 修改build.gradle (Module: xxx)文件
替换原有文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.google.sample.helloandroidjni"
minSdkVersion 22
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
为
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.google.sample.helloandroidjni"
minSdkVersion.apiLevel 22
targetSdkVersion.apiLevel 23
versionCode 1 versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles.add(file('proguard-android.txt'))
}
}
}
}
- 这里需要注意 apply plugin发生了变化 android节点外加了model节点,其中的内容也发生了变化,model仅在android节点外,不要将dependencies节点加入其中
- 这里依旧执行Sync Project>Make Project>Run,没有报错就一切顺利
4 添加JNI代码
- 1.配置NDK 路径,上面依旧提到了如何下载,下载好之后将在sdk/ndk-bundle目录下
- 2.打开build.gradle (Module:xxx)文件,在buildTypes节点下添加如下代码
buildTypes {
...
}
ndk {
moduleName "hello-android-jni"
}
- 3.在MainActivity中添加如下代码
static {
System.loadLibrary("hello-android-jni");
}
public native String getMsgFromJni();
4.执行Sync Project>Make Project,会在MainActivity看到getMsgFromJni方法报错,如下图点击提示创建方法即可
5.点击创建方法后,将看到如下方法,修改returnValue为任意字符即可 如”Hello JNI”
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_com_google_sample_helloandroidjni_MainActivity_getMsgFromJni(JNIEnv *env, jobject instance) {
// TODO
return (*env)->NewStringUTF(env, returnValue);
}
- 6.在MainActivity中调用我们的native方法运行项目即可,如下
((TextView) findViewById(R.id.your_text_view)).setText(getMsgFromJni());
可以看到屏幕显示了”Hello JNI”
5 JNI代码调试
1.首先需要进行一些配置,点击,选择Edit Config
选择Debugger>Debug type改为Native
2.之后就像java代码中一样 在.c文件中点击左边栏打断点运行即可
到此为止就完成了一个简单的JNI调用的例子