Android NDK开发 Jni中打日志LOG(二)

 HelloJni.c文件中,加入头文件和函数声明。最终文件如下:

#include <jni.h>
#include <string.h>
#include<android/log.h>

#define  LOG    "HelloJni"
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型
#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型
#define LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型
#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型

JNIEXPORT jstring JNICALL
Java_ndk_test_com_testndk_TestJni_getString(JNIEnv *env, jclass type) {
    LOGI("call from jni!");
    return (*env)->NewStringUTF(env, "from jni");
}

记得#include<android/log.h>

除了ANDROID_LOG_INFO这个日志级别,还有如下的:

 ANDROID_LOG_UNKNOWN
 ANDROID_LOG_DEFAULT 
 ANDROID_LOG_VERBOSE
 ANDROID_LOG_DEBUG
 ANDROID_LOG_INFO
 ANDROID_LOG_WARN
 ANDROID_LOG_ERROR
 ANDROID_LOG_FATAL
 ANDROID_LOG_SILENT

如果出现 undefined reference to `__android_log_print'的编译异常在android studio的build文件里面

需要添加 ldLibs.addAll(['android', 'log'])

ndk {
            moduleName = 'hello-jni'
            ldLibs.addAll(['android', 'log'])
     }

好了,运行程序吧 

工具类

#ifndef LIBJPEG_JNILOG_H
#define LIBJPEG_JNILOG_H

#define  LOG    "libimg"
#define LOGOPEN 1 //日志开关,1为开,其它为关

#if(LOGOPEN==1)
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__) // 定义LOGD类型
#else
#define LOGD(...) NULL
#endif


#if(LOGOPEN==1)
#define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) // 定义LOGI类型
#else
#define LOGI(...) NULL
#endif

#if(LOGOPEN==1)
#define LOGW(...)  __android_log_print(ANDROID_LOG_WARN,LOG,__VA_ARGS__) // 定义LOGW类型
#else
#define LOGW(...) NULL
#endif

#if(LOGOPEN==1)
#define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG,__VA_ARGS__) // 定义LOGE类型
#else
#define LOGE(...) NULL
#endif

#endif //LIBJPEG_JNILOG_H
原文地址:https://www.cnblogs.com/mingfeng002/p/5845753.html