首先要保证Cmake文件中有log模块引用,不然编译不通过
# 编译一个库
add_library(native-lib # 库的名字
SHARED # 动态库(.so库)
native-lib.cpp # 需要编译的C++文件
)
# 相当于定义一个变量log-lib,引用安卓的打印模块
find_library(log-lib
log
)
# 将变量log-lib连接到so库(我这边的so库名字是native-lib)中,这样这个库就能使用日志打印功能了
target_link_libraries(native-lib
${log-lib}
)
然后在cpp文件中加入:
#include <android/log.h>
#define TAG "kang"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__);
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__);
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__);
自定义打印日志的方式进行打印
完整代码:
#include <jni.h>
#include <string>
#include <android/log.h>
#define TAG "kang"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__);
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__);
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__);
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_jnidemo_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
LOGD("jni打印(LOGD)")
LOGE("jni打印(LOGE)")
LOGI("jni打印(LOGI)")
return env->NewStringUTF(hello.c_str());
}
运行结果: