1.下载NDK开发包,或者直接从Android Studio中下载,配置NDK环境变量,环境变量配置成功后,终端中输入ndk-build会显示这样的提示
2.项目是在Project模式下,在项目中创建native方法
public class MainActivity extends AppCompatActivity {
private View viewById;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewById = findViewById(R.id.tv_show);
}
/**
* 本地方法
* @return
*/
public native String hiNDK();
}
3.创建JNI function,终端定位到java目录下,使用javah工具生成.h的头文件
4.生成的.h头文件在java目录下,有时候可能不会及时出来,只要javah不报错,稍等一下,或刷新一下就出来了,新建JNI forlder
5.把.h头文件放到jni下,新建C/C++代码,里面生成的JNI function直接拷贝到c/c++代码中,添加上形式参数就可以了,剩下的就是转成JNI中的方法了
#include "com_iteast_jni_ndk_MainActivity.h"
JNIEXPORT jstring JNICALL Java_com_iteast_jni_1ndk_MainActivity_hiNDK
(JNIEnv *env, jobject obj){
char* str = "我是一个中国人";
return (**env).NewStringUTF(env,str);
}
6.在JNI中创建Android.mk文件与Application.mk文件,Application.mk是约束生成那些类型的动态库文件(可有可无),Android.mk则约束动态库文件名,和引用的c/c++源码
7.终端定位到main目录下,或者java目录下,生成的.so文件所在的位置不同,自己体会,一般会在main目录生成.so
8.在Android Studio中使用so文件,需要在main文件夹在创建jniLibs文件夹,把所有的so,连同其类型文件夹一同拷贝到jniLibs中,项目中使用动态库文件之前需要调用
System.
loadLibrary
(
"jni_ndk"
)
;
9.运行项目,需要把c代码都去掉,因为我还没有搞明白去如何直接通过AS通过ndk运行程序