step1:
下载最新版ndk
Step: 2. 添加native接口
注意写好native接口和System.loadLibrary()即可了,并无特别之处。
在需要添加native方法的类添加native方法
public class MainActivity extends AppCompatActivity {Step: 3,执行Build->Make Pr ojec t
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
textView = (TextView) findViewById(R.id.tv_hello);
textView.setText(getStringFromNatice());
}
static {
System.loadLibrary("myLib");
}
public native String getStringFromNatice();
}
这一步骤执行一下,验证工程中并无其它错误,并对工程进行了编译,生成了.class文件.
.class文件的生成路径是在 app_path/build/intermediates/classes/debug下的.如下图:
Step: 4.javah生成c头文件
点击"View->Tool Windows->Terminal",即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件。
这里需要注意的是要进入 <Project>\app\src\main的目录下执行javah命令,为的是生成的 .h 文件同样是在<Project>\app\src\main路径下,可以在Studio的工程结构中直接看到。
操作命令:
javah -d jni -classpath <SDK_android.jar>;<APP_classes> com.zzx.jni.MainActivity
在此步骤可能缺少一些类,用分号隔开的形式添加到<SDK_android.jar>即可,也可百度
最后生成文件:
Step: 5.编辑c文件
在main.c 中实现头方法
/* DO NOT EDIT THIS FILE - it is machine generated */util.c 什么都没有,是一个空文件
#include <com_zzx_jni_MainActivity.h>
/* Header for class com_zzx_jni_MainActivity */
JNIEXPORT jstring JNICALL Java_com_zzx_jni_MainActivity_getStringFromNatice
(JNIEnv * env, jobject jObj){
return (*env)->NewStringUTF(env,"Hello From JNI!");
}
Step: 6,在local.properties添加ndk.dir 目录
Step: 7,在local.properties添加ndk.dir 目录
修改build.gradle配置
工程中共有两个build.gradle配置文件,我们要修改的是在<Project>\app\build.gradle这个文件。为其在defaultConfig分支中增加上
defaultConfig {此处 moduleName "myLib" 的myLib 为应用调用的名字
applicationId "com.zzx.jni"
minSdkVersion 12
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk{
moduleName "myLib"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
static {
System.loadLibrary("myLib");
}
public native String getStringFromNatice();
setp:8 再次build-Make project
完成