NDK|3.NDK Android jni开发 C语言中打印log debug模式下 (相机图片美化)

日志打印:
对于很多Android开发人员来说,Android的标准日志打印已经使用的非常习惯,如果在调试C/C++时使用的是printf或者cout这种方式打印日志,那查找起来会非常不舒服,为了使自己舒服起来,还是有必要使用android标准的日志方式打印日志的。先看一下效果:


引入
导入log头文件
在你使用的 .c/ .cpp 文件中
导入 log.h 头文件
#include

#include #define LOG_TAG"MyDemo" #define LOGI(...)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #define LOGE(...)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) #define LOGD(...)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

使用
LOGE("myName : %s", name); // Log.e(TAG,"myName : $name") LOGD("age: %d",age); // Log.d(TAG,"age : $age")


在Android.mk里面配置
LOCAL_LDLIBS :=-llog


%s代表的含义
%d代表的含义
#include #include #include #include "com_yuedong_sport_health_jni_HeartRate.h" #include "HeartRate.h" #include "ImageProcess.h"#include #define TAG "Yd-jni" // 这个是自定义的LOG的标识 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) // 定义LOGD类型JNIEXPORT jfloat JNICALL Java_com_yuedong_sport_health_jni_HeartRate_getHeartRate (JNIEnv *env, jclass jz, jfloatArray floatArray, jint arrayLength, jint flag) { float array[arrayLength]; env->GetFloatArrayRegion(floatArray, 0, arrayLength, array); vector in_vector; for (int index = 0; index < arrayLength; ++index) { in_vector.push_back(array[index]); } return (jfloat)to_beat(in_vector, flag); }JNIEXPORT jdouble JNICALL Java_com_yuedong_sport_health_jni_HeartRate_decodeYUV420 (JNIEnv *env, jclass jz, jshortArray shortArray, jint arrayLength, jint width, jint height, jint type) {LOGD("########## i = %s", "Java_com_yuedong_sport_health_jni_HeartRate_decodeYUV420--start"); short array[arrayLength]; LOGD("########## i = %s", "Java_com_yuedong_sport_health_jni_HeartRate_decodeYUV420--short array[arrayLength]"); env->GetShortArrayRegion(shortArray, 0, arrayLength, array); LOGD("########## i = %s", "Java_com_yuedong_sport_health_jni_HeartRate_decodeYUV420"); return (jdouble)decodeYUV420SPtoRedBlueGreenAvg(array, width, height, type); }


如果是:cmake的话
demo如下:

【NDK|3.NDK Android jni开发 C语言中打印log debug模式下 (相机图片美化)】



设置debug模式的打印?
方法:在c++中,如何定义全局变量?
或者数据存储
原理:封装成一个公共的类,在方法里面控制。其他地方都可以调用这个类和类的方法。
https://blog.csdn.net/weixin_33709609/article/details/92065843
#include #ifndef LOG_H_ #define LOG_H_ class Log { private: Log(); virtual ~Log(); public: static bool IS_DEBUG; static intDEFAULT_MIN_LEVEL; static void V(const char * tag,const char * msg); static void D(const char * tag,const char * msg); static void I(const char * tag,const char * msg); static void W(const char * tag,const char * msg); static void E(const char * tag,const char * msg); static void F(const char * tag,const char * msg); }; #endif /* LOG_H_ */

#include "Log.h"Log::Log() {} Log::~Log() { Log::DEFAULT_MIN_LEVEL = ANDROID_LOG_DEBUG; Log::IS_DEBUG = false; } intLog::DEFAULT_MIN_LEVEL = ANDROID_LOG_DEBUG; boolLog::IS_DEBUG= true; void Log::D(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_DEBUG) { __android_log_print(ANDROID_LOG_DEBUG,tag,"%s",msg); } } void Log::V(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_VERBOSE) { __android_log_print(ANDROID_LOG_VERBOSE,tag,"%s",msg); } } void Log::I(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_INFO) { __android_log_print(ANDROID_LOG_INFO,tag,"%s",msg); } } void Log::E(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_ERROR) { __android_log_print(ANDROID_LOG_ERROR,tag,"%s",msg); } } void Log::W(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_WARN) { __android_log_print(ANDROID_LOG_WARN,tag,"%s",msg); } } void Log::F(const char * tag,const char *msg) { if(Log::IS_DEBUG && Log::DEFAULT_MIN_LEVEL<=ANDROID_LOG_FATAL) { __android_log_print(ANDROID_LOG_FATAL,tag,"%s",msg); } }


第一个参数为打印级别,为以下枚举之一:
typedef enum android_LogPriority { ANDROID_LOG_UNKNOWN = 0, ANDROID_LOG_DEFAULT,/* only for SetMinPriority() */ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT,/* only for SetMinPriority(); must be last */ } android_L



https://blog.csdn.net/wolinxuebin/article/details/80181672

    推荐阅读