我正在使用此代码将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
如果您知道那么请帮忙,谢谢。
答案 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)