当前位置:   article > 正文

Android jni 代码中打印 log,使用android/log.h_jni log输出

jni log输出


日志库在 CMakeLists 的配置

CMakeLists.txt :

#查找库:参数1,一个表示路径的变量,它会赋予库的路径值,且可用于后面的link; 参数2,库的名字
find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

#链接lib。 可以使用 上面 find_library定位到的库,如 ${log-lib},也可以直接写上库的名字。
#这些预构建库在 <ndk-path>//platforms/android-<sdk-version>/arch-<abi>/usr/lib/
target_link_libraries(
	# 省略链接我们自己的库和其它库 
	
	# 链接日志库,可以使用变量名 或 库的名字
	# Links the target library to the log library  included in the NDK.
    ${log-lib}  #use variable
    #log #use real name
	
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

日志库简介

引入:#include <android/log.h>

内部定义了 日志级别的枚举,打印日志的函数;
且可以使用 类似 c 中的 printf一样的格式化参数。

日志级别枚举:

typedef enum android_LogPriority {
  /** For internal use only.  */
  ANDROID_LOG_UNKNOWN = 0,
  /** The default priority, for internal use only.  */
  ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */
  /** Verbose logging. Should typically be disabled for a release apk. */
  ANDROID_LOG_VERBOSE,
  /** Debug logging. Should typically be disabled for a release apk. */
  ANDROID_LOG_DEBUG,
  /** Informational logging. Should typically be disabled for a release apk. */
  ANDROID_LOG_INFO,
  /** Warning logging. For use with recoverable failures. */
  ANDROID_LOG_WARN,
  /** Error logging. For use with unrecoverable failures. */
  ANDROID_LOG_ERROR,
  /** Fatal logging. For use when aborting. */
  ANDROID_LOG_FATAL,
  /** For internal use only.  */
  ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
} android_LogPriority;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

定义宏

如,新建一个 logutil.h。
定义了 ANDROID_LOG_INFO级别的 Tag 为 "stone.stone"的宏 slogd :

#include <android/log.h>
#ifndef LOG_TAG
#define LOG_TAG "stone.stone"
#define slogd(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#endif
  • 1
  • 2
  • 3
  • 4
  • 5

其中,…表示可变参数列表,__VA_ARGS__在预处理中,会被实际的参数列表所替换。

之后,在其它地方使用,例:

#include "logutil.h" 

int num = 100;
void testlog() {
	slogd("test number=%d", number);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/722690
推荐阅读
相关标签
  

闽ICP备14008679号