我使用以下代码将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);
这里的问题是:- 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
如果你知道,那么请帮助,谢谢。
发布于 2013-04-06 18:16:27
在Android4.1之前,所有带有READ_LOG_PERMISSION
的应用程序都可以从其他程序访问日志记录,但在Android Jelly Bean中这一点发生了变化。出于安全原因,Android4.1和更高版本只允许您从自己的程序读取日志。不幸的是,谷歌没有记录这一变化(参见this discussion)
AFAIK唯一的解决办法是启动设备根目录,然后以根用户身份运行程序或运行此命令chmod 04755 /system/bin/logcat
(另请参阅this post)
https://stackoverflow.com/questions/15830634
复制