如何启动在Android上运行logcat的进程?
我想读取Android系统级日志文件。因此我使用以下代码:如何启动在Android上运行logcat的进程?,android,logging,logcat,Android,Logging,Logcat,我想读取Android系统级日志文件。因此我使用以下代码: Process mLogcatProc = null; BufferedReader reader = null; try { mLogcatProc = Runtime.getRuntime().exec( new String[] { "logcat", "-d", "AndroidRuntime:E [Y
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
那么我如何读取日志呢?您不能从普通的非suid android应用程序中读取日志
这是因为一个进程需要以root用户身份或从adb运行,才能在Android中读取logcat文件。如果您的[rooted]手机上安装了终端仿真器,请尝试运行logcat–它会拒绝您对日志缓冲区的权限,除非您选择root
StringBuffer最终为空的原因是,进程将错误消息输出到stderr,而您正在通过BufferedReader读取stdin。您无法从正常的非suid android应用程序执行此操作
这是因为一个进程需要以root用户身份或从adb运行,才能在Android中读取logcat文件。如果您的[rooted]手机上安装了终端仿真器,请尝试运行logcat–它会拒绝您对日志缓冲区的权限,除非您选择root
StringBuffer最终为空的原因是,进程将错误消息输出到stderr,而您正在通过BufferedReader读取stdin。查看LogCollector的源代码,应该可以找到解决问题的方法 看看LogCollector的源代码,应该有一个解决问题的方法 如果您向AndroidManifest.xml添加了正确的权限,原始帖子中的代码将起作用
<uses-permission android:name="android.permission.READ_LOGS" />
PS:当然,您必须用实际的标记替换代码中的[yourlog Tag Here]- 如果您向AndroidManifest.xml添加了正确的权限,原始帖子中的代码将起作用
<uses-permission android:name="android.permission.READ_LOGS" />
PS:当然,您必须用实际的标记替换代码中的[yourlog Tag Here]- 谢谢。但我根据你的建议读到了错误消息。StringBuilder仍然为空。顺便说一句,代码在活动的onCreate方法中。抱歉,我应该说您/无法/读取普通android应用程序的日志,因为它需要以root用户身份运行。谢谢。但我根据你的建议读到了错误消息。StringBuilder仍然为空。顺便说一句,代码在活动的onCreate方法中。对不起,我应该说您/无法/读取普通android应用程序的日志,因为它需要以root用户身份运行。您能解释一下:V*:S参数吗?您能解释一下:V*:S参数吗?