方便以后查找做一下记录:
主要流程:
1.配置NDK->
2.编写native方法和要加载的库名->
3.生成头文件-->
4.编写C文件-->
5.配置gradle中的NDK->
6.命令生成SO库
1.首先新建一个project,然后配置NDK 路径,如下图所示进行配置
找到NDK路径,进行如下配置
这时可以查看 local.properties中的已经自动生成NDK路径,下图所示:
2.接下来在需要调用本地方法的的类文件中编写native 接口和要加载的库:
public class MainActivity extends Activity {
static {
System.loadLibrary("JniTest");
}
public native String getStringFromNative();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView view = (TextView) findViewById(R.id.textview);
view.setText(getStringFromNative());
}
}
3.进行构建
4.生成头文件.h
首先配置一个tools文件,名字随便起,只要自己能识别。下面的命令统一进行设置,直接进行复制即可:
$JDKPath$\bin\javah.exe
-classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$
$ModuleFileDir$\src\main\java 点击保存。
然后在引用native方法的类右击-->externalTools-->你设定的tools文件:
点击输入要生成的头文件的名称,名称包含包名和类名,以下划线“-”分隔,后缀用“.h”,
构建成功后会在main下面生成一个jni文件夹,并包含一个头文件
其内容为:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_fencer_ndkapplication_MainActivity */ #ifndef _Included_com_fencer_ndkapplication_MainActivity #define _Included_com_fencer_ndkapplication_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_fencer_ndkapplication_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_fencer_ndkapplication_MainActivity_getStringFromNative (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
5.复制头文件,放在该文件夹,后缀改为.c,然后修改内容:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #include "com_fencer_ndkapplication_MainActivity.h" /* Header for class com_fencer_ndkapplication_MainActivity */ /* * Class: com_fencer_ndkapplication_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_fencer_ndkapplication_MainActivity_getStringFromNative (JNIEnv * env, jobject object){ return (*env)->NewStringUTF(env, "this form JNI!"); }
6.在APP的build.gradle文件defaultConfig中加入ndk的配置:
ndk { moduleName "JniTest" abiFilters "armeabi", "armeabi-v7a", "x86" }
7.点击rebuild project 构建,成功后会在build文件夹下生成NDK 文件夹:
完成!