我想阅读Android系统级日志文件。所以我使用以下代码:
Process mLogcatProc = null;
BufferedReader reader = null;
try {
mLogcatProc = Runtime.getRuntime().exec(
new String[] { "logcat", "-d",
"AndroidRuntime:E [Your Log Tag Here]:V *:S" });
reader = new BufferedReader(new InputStreamReader(mLogcatProc
.getInputStream()));
String line;
final StringBuilder log = new StringBuilder();
String separator = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
log.append(line);
log.append(separator);
}
}
catch (IOException e) {}
finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {}
}
我也在AndroidManifest.xml中使用过。 但我无法阅读任何内容。 StringBuilder日志为空。并且方法mLogcatProc.waitFor返回0。
那么如何阅读日志呢?
答案 0 :(得分:2)
你无法从普通(非suid)Android应用程序执行此操作。
这是因为进程需要以root用户身份(或从adb)运行才能读取Android中的logcat文件。如果您的[rooted]手机上安装了终端模拟器,请尝试运行logcat - 它会拒绝您对日志缓冲区的权限,除非您是root用户。
你的StringBuffer最终为空的原因是因为进程将错误消息输出到stderr(并且你正在通过BufferedReader读取stdin)。
答案 1 :(得分:2)
如果您向AndroidManifest.xml添加了正确的权限,原始帖子中的代码将起作用
<uses-permission android:name="android.permission.READ_LOGS" />
PS:您必须在代码中用您的实际TAG替换“[Your Log Tag Here]”; - )
答案 2 :(得分:1)
看一下LogCollector的源代码,应该有解决问题的方法。 http://code.google.com/p/android-log-collector/