首先在gradle文件中配置cmake:注意文件路径一定要对应上
android { //...
defaultConfig {
//...
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions -Wno-deprecated-declarations"
version '3.22.1'
}
ndk {
abiFilters "x86_64" //"arm64-v8a",
ldLibs "log"
}
}
cmake {
cppFlags "-frtti -fexceptions -Wno-deprecated-declarations"
version '3.22.1'
}
ndk {
abiFilters "x86_64" //"arm64-v8a",
ldLibs "log"
}
}
}
externalNativeBuild {
cmake {
path file('src/main/CMakeLists.txt')
version '3.22.1'
}
}
cmake {
path file('src/main/CMakeLists.txt')
version '3.22.1'
}
}
}
然后在CMakeLists.txt文件中添加两个cpp文件:
add_library( recite SHARED cpp/native-lib.cpp cpp/native-random.cpp )
find_library(
log-lib
log
log-lib
log
)
target_link_libraries(
recite
recite
${log-lib}
)目前的目录结构:
接下来添加c++打印代码:
随便打开一个cpp文件添加以下代码:
#include <jni.h>
#include <string>
#include <string>
//cout #include <android/log.h> #ifndef LOG_TAG #define LOG_TAG "recite.debug" #define debug(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #endif //cout const char* stringToChar(JNIEnv* env, jstring str) { if (str == NULL) { return ""; } return (const char*)env->GetStringUTFChars(str, NULL); }
//Java_com_example_recite_display_tabs_Setting_cout为包名+类名+调用方法名
extern "C" JNIEXPORT void JNICALL Java_com_example_recite_display_tabs_Setting_cout(JNIEnv * env, jobject obj, jstring str) { debug(stringToChar(env,str)); }
然后打开.java文件找到需要调用c++代码的地方:
public class Setting { static { System.loadLibrary("recite");//recite要和cmakeList.txt的c++对应 } private native void cout(String log); public void clicked(){
cout("cout");
}
}
此时可以看到控制台输出 cout
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)