0

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

    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);

这里的问题是:- 日志保存仅适用于我的应用程序包,而不是带有“I/WifiHW、W/ActivityManager、D/hwcomposer、D/wpa_supplicant”等标签的完整 logcat 输出...

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

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

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

笔记:

我正在使用 Android 4.1 和 4.2

参考链接:Link1Link2Link3Link4

如果你知道然后请帮助,谢谢。

4

1 回答 1

0

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

AFAIK唯一的解决方法是root您的设备,然后以root身份运行您的程序或运行此命令chmod 04755 /system/bin/logcat(另见这篇文章

于 2013-04-06T18:16:27.093 回答