日志打印:

对于很多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如下:

 

 

 

 

 

设置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 int  DEFAULT_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;    }    int    Log::DEFAULT_MIN_LEVEL = ANDROID_LOG_DEBUG;    bool   Log::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

更多相关文章

  1. 解决国行安卓(Android)手机无谷歌(Google)服务的一个参考方法
  2. Android在高jar包版本的工程中修改方法
  3. WebView---Android中调用js方法及js中调用本地方法
  4. 【Android】引入百度定位android:process=":remote",导致onCreate
  5. Linux下的Android电话管理软件――QtADB(安装启动方法)
  6. Android adb功能使用方法
  7. Android 4.4 全套源码及子模块源码的下载方法
  8. android解析XML文件的三方法之SAX

随机推荐

  1. 一起来学习Android自定义控件1
  2. Android(安卓)—— Handler进阶(未完持续)
  3. 震惊! 阿里的程序员也不过如此,竟被一个
  4. android 通知
  5. androidの编辑联系人,姓名颠倒bug
  6. 关于解决 AVD的中文路径出现的问题和更改
  7. Ztorg木马分析: 从Android(安卓)root木马
  8. android aar 包含静态库的打包
  9. 38、Android编写应用-使用布局编辑器Layo
  10. Android(安卓)UI线程和非UI线程