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(表示层)+ ...
随机推荐
- python入门第一篇
python里面 单行注释用:#被注释内容 多行注释用:"""被注释内容""" 要想py2.7和py3.5都能运行,必须在文件头部加: #/ ...
- LeetCode155.最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- 获取栈顶元素. ...
- latex 公式 和排版
http://bbs.chinatex.org/forum.php?mod=viewthread&tid=7423 http://blog.sina.com.cn/s/blog_5e16f17 ...
- hdu2609最小表示法
#include <iostream> #include <algorithm> #include <string.h> #include <cstdio&g ...
- Palindrome Bo (预处理 + 区间DP)
先进行离散化,然后再预处理出所有位置的下一个元素,做好这一步对时间的优化非常重要. 剩下的就是一般的DP了.区间DP #include<bits/stdc++.h> using names ...
- MySql 存储过程 光标只循环一次
[1]MqSql 存储过程 光标只循环一次 针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析: (1)存储过程有问题(仔细检查语法.控制变量.条件等等) (2)保证存储过程正确.调用过 ...
- STL容器之set
[1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...
- linux下卸载mysql(rpm)
linux下卸载mysql 查看是否安装了mysql的组件 rpm –qa |grep –I mysql 卸载前关闭mysql服务 service mysql status service mysql ...
- 吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货
吴恩达讲了干货满满的一节全新AI课,全程手写板书充满诚意非常干货 摘要: 目前,AI技术做出的经济贡献几乎都来自监督学习,也就是学习从A到B,从输入到输出的映射.现在,监督学习.迁移学习.非监督学习. ...
- 基于jquery、bootstrap的数据验证插件bootstrapValidator使用
实时验证用户名是否存在,密码不能和用户名相同,两次密码需要相同,提交之后需要验证返回值: <form id="defaultForm" role="form&quo ...