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

如何启动在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

我想读取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

那么我如何读取日志呢?

您不能从普通的非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参数吗?