Android代码中获取Logcat日志信息

 平时我们通过usb连接手机,然后使用adb logcat -v time > d:\xx的方式获取locat信息,但是如何在APK中编程让APP自动获取logcat信息。
      方法一:使用Runtime.getRuntime().exec()来执行shell命令,具体代码举例如下:
       try {
           ArrayList commandLine = new ArrayList();
          commandLine.add( "logcat");
           commandLine.add( "-d");使用该参数可以让logcat获取日志完毕后终止进程
           commandLine.add( "-v");
           commandLine.add( "time");
           commandLine.add( "-f");如果使用commandLine.add(">");是不会写入文件,必须使用-f的方式
           commandLine.add( "/sdcard/log/logcat.txt");
           Process process = Runtime.getRuntime().exec( commandLine.toArray( new String[commandLine.size()]));
           BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()), 1024);
           String line = bufferedReader.readLine();
           while ( line != null) {
               log.append(line);
               log.append("\n")
           }
       } catch ( IOException e) {
       }
      但是我们发现获取的只是本应用自己的logcat信息,而不像adb logcat 获取所有的log信息。查看资料得到如下信息:
      android.permission.READ_LOGS:app读取日志权限,android 4.1之前版本通过申请READ_LOGS权限就可以读取其他应用的log了。但是谷歌发现这样存在安全风险,于是android 4.1以及之后版本,即使申请了READ_LOGS权限也无法读取其他应用的日志信息了。4.1版本中 Logcat的签名变为 “signature|system|development”了,这意味着只有系统签名的app或者root权限的app才能使用该权限。普通用户可以通过ADB查看所有日志。
     也就是说android4.1之后不能通过以上代码方式获取logcat信息,那写这么多代码还有什么意义呢。
     那就把手机ROOT了吧。
     基于已经root的手机我们再执行以上命令,发现获取的log日志还是一样的,什么原因呢?
     第一反应就是adb shell进去然后su一把,但是执行后还是同样的效果,分析后发现:我们程序执行的进程和adb shell进程不是同一个,也就是说程序执行时的环境并没有root,怎么才能同时执行su和logcat命令呢?
    
    方法二:使用ShellUtils工具执行logcat命令
    ShellUtils工具的源码见:http://blog.csdn.net/hknock/article/details/40658351,该类的使用说明见:http://www.trinea.cn/android/android-java-execute-shell-commands/,需要把ShellUtils拷贝到自己的工程下面。然后上面的代码换成:
            commnandList.add("rm -r /mnt/sdcard/bugLog/logcat.txt");如果不删除之前的logcat.txt文件,每次执行logcat命令也不会更新该文件
            commnandList.add("logcat -d -v time -f /mnt/sdcard/bugLog/logcat.txt");
            ShellUtils.execCommand(commnandList, true);
    问题搞定!!
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值