http://blog.csdn.net/w71451000/article/details/52355522
1.Logcat命令的使用
logcat -c 清除屏幕显示
logcat -d 显示
logcat 显示日志
log logcat -f filename将日志输出到一个文件中
logcat -v time 显示时间
logcat -v time -s tag:priority 这里会输出与priority相等或者优先级比priority优先级高的
priority有5种:
V — Verbose (优先级最低)
D — Debug
I — Info
W — Warning
E — Error
F — Fatal
S — Silent
比如我们在串口输入logcat -v time -s ScreenSaver:D
会打印出
01-02 10:30:05.690 I/ScreenSaver( 957): screen now time = 8934wait time :480
Screensaver是tag,因为I的优先级比D高,因此也会输出I的(Log.i());
2.如何在代码中运行命令行
这需要用到
Runtime.getRunntime.exec();
exec的参数一般为String [];
比如我们要抓取日志带时间,我们的代码可以这样写
Runtime.getRuntime.exec(new String[]{"logcat","-v","time","-s","ScreenSaver:D"})
通过exec直接运行”logcat -v time -s ScreenSaver:D”,是不行的。
上面Runntime.getRunntime.exec会返回Process对象,Process有6种方法可以调用:
1.destroy():杀掉子进程
2.exitValue():返回子进程的出口值,值 0 表示正常终止
3.getErrorStream():获取子进程的错误流
4.getInputStream():获取子进程的输入流
5.getOutputStream():获取子进程的输出流
6.waitFor():导致当前线程等待,如有必要,一直要等到由该 Process对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,根据惯例,0表示正常终止
这里我们主要使用getInputStream()来获取打印日志的输入流
3.具体代码参考
这里我只截取一部分代码作为参考
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
我们通过str=buffRead.readLine()来读取日志的每一行数据,再通过fos.write((time+str).getBytes());写入到文件中。
4.注意事项
目前android中想要抓取日志,只允许获取系统及以上权限的apk才能进行这个操作,否则只能获得本app的logcat,因此,在抓取日志之前,最好使用签名工具对app进行签名获取系统权限