android studio JNI 环境配置实现 java 调用 c/c++
1、在 app 级的 build.gradle 文件配置两个地方
android{
defaultConfig{
// 在 defaultConfig 里配置下面代码
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"//添加对 c++ 的异常处理支持
}
}
}
buildTypes{
//在 buildTypes 里添加 CMakeLists.txt (c文件的配置文件)
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
}
2、配置好后 在 mainactivity 写 native 方法 这个方法是在 c 里面实现的。
public native String getFromC();
3、在项目的 main 目录下面新建个文件夹 myc,再新建个 testC.c 文件代码如下
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_test_custom_test_MainActivity_getFromC(JNIEnv * env, jobject jobj){return (*env)->NewStringUTF(env,"I'am From C");}
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_test_custom_test_MainActivity_getFromC(JNIEnv * env, jobject jobj){return (*env)->NewStringUTF(env,"I'am From C");}
上面的这句代码怎么生成的?
用 javah 生成 .h 文件 然后拷贝过来的
至于 return 语句是 JNI 开发 不在本篇范围
3、在 app 级目录下新建个文件 CMakeLists.txt 里面的配置如下
add_library(#库名 等会需要lode的库 这个库是由系统生成so的test_lib# c 文件的路径src/main/myc/testC.c)
add_library(#库名 等会需要lode的库 这个库是由系统生成so的test_lib# c 文件的路径src/main/myc/testC.c)
4、java 调用 c
加载库 test_lib
static {System.loadLibrary("test_lib");}
调用 getFromC 方法源码