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 方法?
源碼