NDK 下载地址:http://developer.android.com/intl/zh-cn/ndk/downloads/index.html
工具:Android studio
新建工程 Hello_JNI
工程右击,选项:Open Module Settings: 设置Ndk路径 或者 :直接在local.properties 添加:ndk.dir=(ndk路径)/android-ndk-r10e
gradle.properties 添加:android.useDeprecatedNdk=true
新建class :
public class Ndk_JNI { public native String getCString(); }
菜单栏:build -> Make Project (生成class文件,路径:工程所在目录\Hello_JNI\app\build\intermediates\classes\debug\包路径下\*.class)
Android Studio 下打开命令行(下方的Terminal窗口 , 如没有: View-> Tool Windows->Ternimal)
进入路径debug
了解javah命令:命令行输入 :javah -help
命令执行成功:debug下添加了jni目录,里面有一个.h文件
工程中在main目录下(java和res同级目录下新建文件夹:jni),打开debug下的jni目录,将.h文件拷贝到工程中的jni文件下
工程目录jni下,新建 .c 文件
#include "com_example_anlc_hello_jni_Ndk_JNI.h" //之前生成的头文件 JNIEXPORT jstring JNICALL Java_com_example_anlc_hello_1jni_Ndk_1JNI_getCString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"This is from jni text"); }
当前module下(比如,app)下的build.gradle 的 defaultConfig 里添加:
defaultConfig {... ndk{ moduleName "jniMethod" abiFilters "armeabi", "armeabi-v7a", "x86" //指定3种不同平台 } }
Ndk_JNI文件添加代码,完整代码:
public class Ndk_JNI { public native String getCString(); static { System.loadLibrary("jniMethod"); //build.gradle中moduleName的值}}
MainActivity.java:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.textView); Ndk_JNI ndk_jni=new Ndk_JNI(); textView.setText(ndk_jni.getCString()); }