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");
}
上面的这块代码怎么生成的?
用 javah 生成 .h 文件 然后打开 .h 文件 拷贝里面的代码
4. 在 app 级目录下新建个文件 CMakeLists.txt 里面的配置如下
add_library(
#库名 等会需要lode的库 这个库是由系统生成so的
test_lib
# 设置库 为可被加载 不然会出现加载不了库的错
SHARED
# c 文件的路径
src/main/myc/testC.c
)
最后 java 调用 c
加载库 test_lib
static {
System.loadLibrary("test_lib");
}
在 activity 调用方法 getFromC
**
源码
**