在JNI开发过程中,C/C++函数有时需要打印一些信息,特别是在调试时;
此篇主要讲解C/C++中的Log配置;
1. 项目添加C/C++通用库
2. Android.mk添加log库
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKLogDemo
LOCAL_SRC_FILES := NDKLogDemo.cpp
LOCAL_LDLIBS := -lm -llog
include $(BUILD_SHARED_LIBRARY)
3. 引用Log头文件
c/cpp文件引用Log头文件
#include <android/log.h>
4. 定义Log的Tag变量
#define LOG_TAG "jnidemo"
5. 定义LOG函数
// 定义debug信息
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
// 定义error信息
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
// 定义info信息
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
6. 使用LOG函数
LOGI("%s", char *str);
第一个参数:字符串的格式符;
第二个参数:必须是一个char指针;
如果第二个参数为jstring类型的 jstr,打印需要通过GetStringUTFChars(jstr, 0)函数把jstring指针转化为UTF-8格式C字符串;
C/C++LOG配置的案例:
#include <jni.h>
#include <android/log.h>
#include "com_niubashaoye_ndk_log_jni_JNITools.h"
#define LOG_TAG "jnidemo"
// 定义debug信息
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
// 定义error信息
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
// 定义info信息
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
/*
* Class: com_niubashaoye_ndk_log_jni_JNITools
* Method: testLog
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_niubashaoye_ndk_log_jni_JNITools_testLog(
JNIEnv *env, jobject obj, jstring str) {
//如果需要打印使用GetStringUTFChars()把jstring指针转换为C的字符串;
const char *locstr = env->GetStringUTFChars(str, 0);
LOGI("JNI的C/C++配置Log打印日志信息:%s", locstr);
}
C/C++配置Log案例代码:https://download.csdn.net/download/niuba123456/10533463