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

在开发时候,遇到某些设备没有开启adb服务,一时半会也不知道设备打开adb的隐藏页面,调试的时候就难免抓狂。完整的调试方案只能是把log写到本地,具体有两种调试方法
1. 封装一个utils.log接口,接口实现日志写入到本地文件;
2. 读取系统logcat信息,并写到本地。
第一种方法比较简单就不需要阐述了;

一、实现读取logcat日志
步骤一、在AndroidManifest.xml中添加读取日志的权限
<uses-permission android:name="android.permission.READ_LOGS" />
步骤二、使用logcat命令
源码如下:
try {
    java.lang.Process p = Runtime.getRuntime().exec("logcat");
    final InputStream is = p.getInputStream();
    new Thread() {
        @Override
        public void run() {
            FileOutputStream os = null;
            try {
                os = new FileOutputStream("/sdcard/writelog.txt");
                int len = 0;
                byte[] buf = new byte[1024];
                while (-1 != (len = is.read(buf))) {
                    os.write(buf, 0, len);
                    os.flush();
                }
            } catch (Exception e) {
                Log.d("writelog", "read logcat process failed. message: " + e.getMessage());
            } finally {
                if (null != os) {
                    try {
                        os.close(); os = null;
                    } catch (IOException e) {
                        // Do nothing
                    }
                }
            }
        }
    }.start();
} catch (Exception e) {
    Log.d("writelog", "open logcat process failed. message: " + e.getMessage());
}
可以到sdcard下面获取日志文件,大功告成。

二、关于READ_LOGS权限
由于日志往往包含应用的隐藏信息,为了防止恶意程序监控某些其他应用。从android4.1(SDK > 16)开始,普通应用只能读取应用自身进程的信息,也不能读取子进程日志信息。只有系统应用(进程)才能读取所有进程的logcat信息。
要读取所有进程的logcat信息,必须有
1. 系统签名
2. 或者sharedUserId system
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值