Android Java层,Native层,Lib层打印Log简介【转】
本文转载自:https://blog.csdn.net/AndroidMage/article/details/52225068
说明: 这里我根据个人工作情况说明在各个层打印log。如有问题欢迎拍砖。
1. Java层打印log。
这个比较简单Android有封装好的Log.java, 可以使用。
例如:
Log.d(String Tag, String msg);
个人习惯: 单独写一个类包装一下:MLog.java:
import android.util.Log;
public class MLog {
public final static boolean DEBUG = true;
public static void d(String tag, String msg) {
if (DEBUG) {
Log.d(tag, msg);
}
}
...
}
1
2
3
4
5
6
7
8
9
10
11
12
2. Native 层打印log。
网络上很多资料:http://stackoverflow.com/questions/12159316/logging-values-of-variables-in-android-native-ndk
步骤如下:
Android.mk 中添加:
LOCAL_LDLIBS :=-llog
在需要打印的log的地方使用:
#include <android/log.h>
#define TAG "DroidMage" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) // 定义LOGD类型
xxx_function() {
LOGD("%s hello world", "MSG");
}
1
2
3
4
5
6
7
8
9
NOTE: 这只是对__android_log_print() 函数做了包装而已 原型如下:
/**
* int __android_log_print(int prio, const char *tag, const char *fmt, ...)
*
* ANDROID_LOG_DEBUG : 是在头文件定义的log level,类似与java层Log.d()打印Debug信息。
* tag : char * 类型的字符串。
* format : char* 格式化的字符串
*/
// 例子:
char * tag = "DroidMage";
char * format = "%s";
char * msg = "This is for test!";
__android_log_print(ANDROID_LOG_DEBUG, tag, format, msg);
1
2
3
4
5
6
7
8
9
10
11
12
13
Android 中有 < cutils/log.h> 做好了封装:
#define LOG_TAG DroidMage //一定要定义,原因是< log/log.h> 做了封装,没有定义则未NULL。
xxx_func() {
//log 的Tag就是所定义LOG_TAG
LOGD("%s", msg);
}
1
2
3
4
5
6
7
3. bionic层打印log(笔者做过系统开发的工作,有时需要调试lib层)
参考源码:”/bionic/libc/bionic/private/libc_logging.cpp”
#include "private/libc_logging.h"
xxx_function() {
//ANDROID_LOG_DEBUG: int 类型, 定义log level, 参考"/bionic/libc/bionic/private/libc_logging.h" 定义。
__libc_format_log(ANDROID_LOG_DEBUG, tag, "%s", msg);
}
1
2
3
4
5
6
7
8
9
未完待续。。。
---------------------
作者:机器魔法师
来源:CSDN
原文:https://blog.csdn.net/AndroidMage/article/details/52225068
版权声明:本文为博主原创文章,转载请附上博文链接!
Android Java层,Native层,Lib层打印Log简介【转】的更多相关文章
- 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类
快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...
- Android Framework中的Application Framework层介绍
Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层.我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得. Fr ...
- Android 从上层到底层-----app层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 MainActivity.java package com.aaron ...
- Android源码剖析之Framework层升级版(窗口、系统启动)
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 看本篇文章之前,建议先查看: Android源码剖析之Framework层基础版 前面讲了frame ...
- Android 从上层到底层-----jni层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 led_jni.h path:hardware/rockchip/fi ...
- Android 从上层到底层-----hal层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 led_hal.c path:hardware/rockchip/fi ...
- Android 从上层到底层-----kernel层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 1.在dts文件中增加 led 设备 path:kernel/arch ...
- Android HAL层与Linux Kernel层驱动开发简介
近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...
- 【转载】 JAVA三层架构,持久层,业务层,表现层的理解
JAVA三层架构,持久层,业务层,表现层的理解 转载:http://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+ ...
随机推荐
- Oracle数据库分区相干知识点
Partition Characteristics:1.Partition Key;2.Partitioning Strategies Partitioning Strategies:1. range ...
- SQL Server物化视图学习笔记
一. 基本知识 摘抄自http://www.cnblogs.com/kissdodog/p/3385161.html SQL Server索引 - 索引(物化)视图 <第九篇> 索引视 ...
- 域名重新绑定ip时访问地址NotFount404
情形描述:部署在A服务器IIS上的asp.net程序,搬迁到B服务器上,重新绑定域名和ip后.再访问网址时有些电脑能正常访问,而有些电脑报404 not found错误. 经分析发现是个人电脑网络设置 ...
- 将网站项目转为 Web form应用程序(转)
转自 http://blog.sina.com.cn/s/blog_53729e4601014ze9.html 本文介绍如何将现有的 Microsoft Visual Studio 2005 网站项目 ...
- 001- CreateProcess failed with error 216 (no message available)错误详解
问题详解 runnerw.exe: CreateProcess failed with error 216 (no message available) 看描述,创建进程失败,应该是main这个入口文 ...
- CALL与retn
一.CALL 例如: 004013D9 CALL 00401C4C //ESP = 0060F9C8 004013DE 相当于 sub esp,0x4; //ESP = 0060F9 ...
- Python全栈-day5-数据类型
一.元组 1.元组基础 1)定义:不可变的‘列表’,定义方式(元素1,元素2.......) 2)用途:存多个值,但是只能读不能写 注意:元组的不可变指的是元组内元素id的不可变 t = (11,2, ...
- html5-样式的三种方式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- html5-特殊符号的使用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- this上下文一致
什么是this对象 先来说说什么是this对象吧,每个函数在调用的时候都会自动获取两个特殊变量:this和arguments对象.this值具体是指哪个对象是和该函数的执行环境相关的.如果是作为对象的 ...