一、引入log库
-
1.如果是使用android.mk的方式手动生成so库,在android.mk的配置文件中加入配置:
LOCAL_LDLIBS += -llog
-
2.如果是使用构建脚本的方式生成so库,需要在build.gradle文件的ndk闭包中配置:
defaultConfig { applicationId "com.huyingzi.xxxx" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk{ moduleName "helloword" abiFilters "armeabi","armeabi-v7a","x86" ldLibs "log" //引入log库 } }
3.如果是使用Cmake的方式构建so库,在CMakeLists.txt文件里面已经默认引入log库不需要再自行配制
二、C代码中引入头文件
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
三、打印日志的代码(跟C语言中printf的使用方式一样)
//打印logcat
LOGD("name=%s age=%f\n",name,age);
四、给jni日志添加开关
#include <android/log.h>
#define DEBUG 0 //日志开关,1为开,其它为关
#if(DEBUG==1)
#define LOG_TAG "JNI"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#else
#define LOGV(...) NULL
#define LOGD(...) NULL
#define LOGI(...) NULL
#define LOGE(...) NULL
#endif