android应用调试之如何保存logcat日志到本地

2017-12-07 07:57:05来源:CSDN作者:wusj3人点击

分享

http://blog.csdn.net/sweettool/article/details/74940349

在开发时候,遇到某些设备没有开启adb服务,一时半会也不知道设备打开adb的隐藏页面,调试的时候就难免抓狂。完整的调试方案只能是把log写到本地,具体有两种调试方法1. 封装一个utils.log接口,接口实现日志写入到本地文件;2. 读取系统logcat信息,并写到本地。第一种方法比较简单就不需要阐述了;
一、实现读取logcat日志步骤一、在AndroidManifest.xml中添加读取日志的权限[plain] view plain copy
  1. <uses-permission android:name="android.permission.READ_LOGS" />  
步骤二、使用logcat命令源码如下:[java] view plain copy
  1. try {  
  2.     java.lang.Process p = Runtime.getRuntime().exec("logcat");  
  3.     final InputStream is = p.getInputStream();  
  4.     new Thread() {  
  5.         @Override  
  6.         public void run() {  
  7.             FileOutputStream os = null;  
  8.             try {  
  9.                 os = new FileOutputStream("/sdcard/writelog.txt");  
  10.                 int len = 0;  
  11.                 byte[] buf = new byte[1024];  
  12.                 while (-1 != (len = is.read(buf))) {  
  13.                     os.write(buf, 0, len);  
  14.                     os.flush();  
  15.                 }  
  16.             } catch (Exception e) {  
  17.                 Log.d("writelog""read logcat process failed. message: " + e.getMessage());  
  18.             } finally {  
  19.                 if (null != os) {  
  20.                     try {  
  21.                         os.close(); os = null;  
  22.                     } catch (IOException e) {  
  23.                         // Do nothing  
  24.                     }  
  25.                 }  
  26.             }  
  27.         }  
  28.     }.start();  
  29. catch (Exception e) {  
  30.     Log.d("writelog""open logcat process failed. message: " + e.getMessage());  
  31. }  
可以到sdcard下面获取日志文件,大功告成。
二、关于READ_LOGS权限由于日志往往包含应用的隐藏信息,为了防止恶意程序监控某些其他应用。从android4.1(SDK > 16)开始,普通应用只能读取应用自身进程的信息,也不能读取子进程日志信息。只有系统应用(进程)才能读取所有进程的logcat信息。要读取所有进程的logcat信息,必须有1. 系统签名2. 或者sharedUserId system

微信扫一扫

第七城市微信公众平台