一、Android log框架简介

二、log获取方式

1、Eclipse 抓取

1)根据信息类型过滤log

那个显示框上面还有个下拉列表选项可以选择过滤哪些信息。
a、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,代码实现就是Log.v(“”,”“);
b、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择
c、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
d、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
e、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。log的过滤

2)自定义标签,过滤log

点击 添加Filter Name 和 by log Tag 来过滤代码中的Log.v(“yaoming”,”ringTone[0]== “); log信息

2、adb 抓取log

ADB 是一个C/S 架构的应用程序,有三部分组成:

1)adbclient,运行在PC上(DDMS)

2)adbdaemon(守护进程),运行在Emulator中

3)adbserver(服务进程),运行在PC(任务管理器上可以看见),

管理着adb client和 adb daemon通讯

注:server与client通讯端口5037, adb server会与emulator交互,使用的端口有两个,一个是5554专用与emulator实例的连接,那么数据可以从emulator转发给IDE控制台,另一个则是5555,专门与adb daemon连接为后面调试使用

1、adbdevices 查看是否连接成功

2、adbinstall

3、adbuninstall (卸载的软件时,卸载的是包名,后面跟的是包的名字,而不是.APK)

4、Logcat

1)、adb logcat>main.txt 重定向log、

2)、adb logcat -b main-v time>app.log 打印应用程序的log

3)、adb logcat -bradio -v time> radio.log 打印射频相关的log,SIM STK也会在里面,modem相关的ATcommand等,

4)、adb logcat -bevents -v time 打印系统事件的日志,比如触屏事件。。。

5)、tcpdump 是很有用的,对于TCP/IP协议相关的都可以使用这个来抓,adb shell tcpdump-s 10000 -w /sdcard/capture.pcap,比如抓mms下载的时候的UA profile,browser上网的时候,使用proxy的APN下载,streaming的相关内容包括UA profile等。

3、Mtklog

1, radio log

线:usb cable

命令: adb logcat –b radio –v time >radio.txt

-v time: 表示log中加入了时间信息

2, main log

main log和我们从DDMS中看到的log是一致的

线: usb cable

命令: adb logcat –b main –v time >main.txt

-v time: 表示log中加入了时间信息

3, event log

event log属于system log

线: usb cable

命令: adb logcat –b events –v time >events.log

-v time: 表示log中加入了时间信息

4, kernal log

使用超级终端来抓kernal log,请参考以下步骤:

四、log分析

1、Java Exception

   在main log中分析,要注意Exception的时间、PID和栈

2、Native code/jni 导致

1)、error.h 这个文件 中标明含义

2)、sqlite 错误 sqlite3.h中查找 标明含义

3)、NO space left ondevice 磁盘空间已满

使用du命令 查看文件空间

find -type size +100k 大于100k文件

4)、ooM 异常

3、ANR

在log中查看 system log找到ANR关键字

MTK log分析

1、Mobile Log:也称AP log,系统应用层的log,比如应用程序无响应或强行关闭,kernel相关的,比如driver(相机、蓝牙、usb、启动)出了开机问题、手机对服务唤醒和休眠的一些记录蓝牙相关问题。

2、主要包括四种log:kernel、main、event and radio log

3、Modem log 是手机里负责搜网和sim卡数据操作底层模块,

md log用于分析掉网、掉话和无信号问题,一般此文件都需要特殊工具解码,主要针对射频modem相关问题抓取(mtklog/mdlog)

4、Network log

主要针对网络的Network相关问题抓取(mtklog/netlog)

主要场景:彩信下载、浏览器上网、streaming问题相关

WIFI、数据流量下不同场景信号下的网络连接问题,网络下的数据传输问题

五、抓取log注意事项

1、抓取log时最好标注一下问题发生的时间

2、MTK usr和eng的区别

MTK 补充说明差异:

(1) Debug/LOG 方面,原则上user版本只能抓到有限的资讯,eng可以抓到更多的资讯,Debug能力更强,推崇使用eng版本开发测试

  • 因user/eng版本设置ro.secure不同,导致user版本adb只拥有shell 权限,而eng版本具有root权限
  • MTK System LOG 在ICS以后,在user版本默认关闭全部LOG,在eng版本中默认打开,以便抓到完整的资讯
  • 在eng版本上,LOG量 >= user 版本的log量,一些地方会直接check eng/user版本来确认是否打印LOG
  • user 版本默认关闭uart, eng版本默认开启uart
  • 在eng版本上,开启ANR的predump, 会抓取ftrace,可以得到更多ANR的资讯
  • 在eng版本上,可用rtt抓取backtrace,可开启kdb进行kernel debug,可用ftrace抓取cpu 执行场景
  • MTK aee 在ENG版本抓取更多的异常资讯,比如native exception会抓取core dump信息

(2) 性能方面,原则上进行性能测试请使用user版本测试

  • user 版本为提高第一次开机速度,使用了DVM的预优化,将dex文件分解成可直接load运行的odex 文件,ENG版本不会开启这项优化
  • 更少的LOG打印,uart的关闭,原则上user版本的性能要优于eng版本

(3) 如何确认user/eng版本

  • Java 层,checkandroid.os.Build类中的TYPE值
  • native 层,property_get(“ro.build.type”,char* value, “eng”);然后check value值
  • Debug 时, adb shellgetprop ro.build.type返回值如果是user即user 版本,eng即eng版本
  • Log 确认, mobilelog/Aplog_xxxxx/versions中查看ro.build.type属性

更多相关文章

  1. 基于Bmob的Android即时通讯应用源码解析
  2. Android(安卓)Q(10.0)版本新特性以及兼容性适配
  3. Android之完美退出方法(2.1-2.2-2.3SDK版本测试通过)
  4. 一张图告诉你Android手机系统更新多么混乱
  5. Android(安卓)studio 利用gradle快速编译出apk
  6. android监听自身被卸载的方法
  7. 【Android】Android的与服务器端传送信息使用JSON类-JSONObject
  8. Android无线电信息管理开篇准备工作
  9. 占比高达77% 安卓4.x版本仍稳坐江山

随机推荐

  1. laravel原生MySQL之Group记录
  2. 高分求解:如何每天将本地的sybase的数据导
  3. MySQL 5.7.22 免安装配置
  4. MySQL数据库阶段学习目录
  5. 临时表空间、drop、truncate、delete的区
  6. SQL SERVER 2005 数据库对比工具,并自动生
  7. sql 内置函数 获取表的 列名
  8. 多表查询SQL中的多个计数
  9. HSQLDB / Oracle - IN子句中的1000多个
  10. PHP mysql_fetch_array得不到数据