如何使用所有过滤器存储logcat输出& SdCard上的文件中的标签?

时间:2013-04-05 09:42:07

标签: android android-logcat

我正在使用此代码将logcat输出保存到SD卡: -

    public String ReadFromCMD(String[] strCmdArgs)
    {

     ProcessBuilder cmd;
     String result="";
     try
     {
          cmd = new ProcessBuilder(strCmdArgs);
          Process process = cmd.start();
          InputStream in = process.getInputStream();

          BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
            int read;
            char[] buffer = new char[4096];
            StringBuffer output = new StringBuffer();

            process.waitFor();

            while ((read = reader.read(buffer)) > 0) 
            {
                output.append(buffer, 0, read);
            }
            reader.close();
            result = output.toString();
            in.close();

     } catch(Exception ex){ ex.printStackTrace(); }

     return result;
}

这里我可以将日志保存到文件中。

使用此命令。

String[] args_Logs_Save = "/system/bin/logcat -v time -d -b radio -b events -b main -b system".split(" ");
ReadFromCMD(args_Logs_Save);
这里的问题是: - 日志保存仅适用于我的应用程序包,而不是完整的logcat输出,带有“I / WifiHW,W / ActivityManager,D / hwcomposer,D / wpa_supplicant”等标签......

当我从adb shell手动执行“/ system / bin / logcat -v time -d -b radio -b events -b main -b system”时,它会成功执行并给我所有输出

但是当我从我的代码上面执行时,它只会为我的包提供输出。

那么现在该如何从上面的代码中获取所有logcat?

注意:

我正在使用Android 4.1& 4.2

参考链接:Link1Link2Link3Link4

如果您知道那么请帮忙,谢谢。

1 个答案:

答案 0 :(得分:0)

在Android 4.1之前,READ_LOG_PERMISSION的所有应用都可以访问其他程序的日志记录,但在Android Jelly Bean中进行了更改。出于安全原因,Android 4.1及更高版本仅允许您从自己的程序中读取日志记录。不幸的是,Google未记录此更改(另请参阅this discussion

AFAIK唯一的解决方法是根设备,然后以root身份运行程序或运行此命令chmod 04755 /system/bin/logcat(另请参阅this post