我如何启动在Android上运行logcat的进程?

时间:2010-12-29 06:49:00

标签: android logging logcat

我想阅读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。

那么如何阅读日志呢?

3 个答案:

答案 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/