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運行程序