一、新建项目勾选上这个 include C++ Support,项目工程会自动在App.bundle中添加这个代码和这个文件CMakeLists.txt,直接运行就能看到加载C++的native方法
defaultConfig {
applicationId "com.iteast.jnitest"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
abiFilters "x86"//这个可以省略,省略后就会生成所有类型的动态库文件
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
二、如果工程中途加入native方法,走如下步骤
-
打开一个项目,从菜单栏中选择 Tools > Android > SDK Manager 。
-
点击 SDK Tools 选项卡。
-
勾选 LLDB,CMake 和 NDK 。如图一:
-
创建本地方法
/**
* A native method that is implemented by the 'test_jni' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("test_jni");
}
- 使用javah生成头文件(如果会直接写头文件,没有必要使用javah),注意Android Studio项目,Terminal需要定位到程序包目录(即src\java目录下如图二)
- main目录下新建一个JNI Folder,如图三
- 在jni文件中写C\C++代码
#include<stdio.h>
#include<stdlib.h>
#include<jni.h>
jstring Java_com_iteast_jnitest_MainActivity_stringFromJNI(JNIEnv* env,jobject obj){
char* text = "哈哈哈,今天研究了一下JNI!!!";
return (**env).NewStringUTF(env,text);
}
- 运行项目即可执行C\C++方法
- so文件生成地方,如图四,如果使用so文件,请在main目录下,创建与java目录平级的jniLibs目录,把相应的so文件放入里面