前言
在Android APP的测试过程中经常遇到crash和anr,开发人员习惯通过eclipse或者eclipse的ddms组件进行捕抓日志,测试人员常通过在dos窗口下adb命令的方式来抓取日志。前者的缺点是启动时非常耗时,后者呢则每次都要写命令也比较麻烦(需要截图时也存在这个问题)。
针对这样的情况,本文分享一个通过adb程序与bat命令组合的技巧来抓取日志,只要3~5秒即可获取崩溃日志,非常快捷。
1. 准备工作
一、安装JDK(好像不装也没关系,未实测)和ADB(V1.0.31版本或以上),网上很多指导方法,这里就赘述了。
二、在PATH环境变量中添加ADB路径。这样就能在任意地方调用ADB命令,如adb.exe的位置在c:\adb\adb.exe,则在path中加入c:\adb。
2. 制作捕获日志的批命令
一、制作捕获crash异常的批命令
将以下命令复制,制作成logcat.bat文件。logcat.bat可以放置任意位置(如:桌面)。
@ECHO OFF for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2% SET mutID=_mut @ECHO ON adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log" pause
原理:
该工具的原理是bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地。
用法:
当手机需要重现crash、或者x分钟内已经发生过crash(x≈15~30),点击此bat,logcat命令会将手机的logcat日志拉下来并实时记录,直到你关闭cmd窗口。然后在拉下来的txt中寻找fatal字眼,附近上下文即为crash日志。
二、制作捕获ANR异常的批命令
anr:Application Not Responding -- 程序无响应。
将以下命令复制,制作成“ANR捕获.bat”文件。“ANR捕获.bat”可以放置任意位置(如:桌面)。
@ECHO OFF for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2% SET mutID=_mut @ECHO ON adb pull data/anr/traces.txt traces_%timeStamp%.txt
原理:
同上,将手机的traces.txt拉到本地。手机发生anr之后可以用,但一般用不上。
三、优点与限制
手机无需root
无需eclipse支持
方便保存、查找日志
实时日志不能在cmd窗口回显
3. 演示
以抓取crash异常为例:
步骤1:将android手机连接电脑,开启开发者模式并允许usb调试;
步骤2:运行logcat.bat文件,会出现cmd窗口;
步骤3:①如果手机程序已经发生过crash,5秒后关闭cmd窗口;②如果是想重现crash,则在手机端重现后即可关闭cmd窗口。
步骤4:在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。