Android:通过应用程序读取adb logcat日志

时间:2012-03-17 15:19:46

标签: android logging android-logcat

我正在尝试编写一个应用程序来读取adb logcat创建的日志。按照link1link2上的代码,我有以下代码:

try {
        Process process = Runtime.getRuntime().exec("logcat");
        System.out.println("Process : " + process); // shows process id
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        System.out.println("Buffered reader : " + bufferedReader.readLine());
        StringBuilder log = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            log.append(line);
        }
        TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(log.toString());
    } catch (IOException e) {
    }

为了测试缓冲读卡器正在读取什么,我放了一个println,但是我收到一条消息“无法绑定tcp:5038”。上面的代码不会读取任何日志。我也尝试使用“logcat *:V”,但我没有得到甚至最低优先级的日志。

我给了我的应用程序权限:android.permission.READ_LOGS。

我在Android模拟器上测试我的代码。

有人可以指出我做错了什么。

感谢您的帮助。

修改

我尝试了“logcat -d”,我得到了一行日志。在代码中,可以观察到提供了try / catch块; 当我从应用程序中删除权限READ_LOGS时,不会引发异常并且bufferReader只是打印出null(通常当应用程序找不到它需要的权限时,它会引发异常)。 这种行为的原因是什么?

EDIT2:

我尝试了Log.d(TAG,log.toString())并获得了多行文本。有人可以解释上一个编辑中的最后一个问题:当我删除所需的权限时,为什么应用程序不会引发异常?

2 个答案:

答案 0 :(得分:3)

您可能会收到消息" cannot bind tcp:5038"由于没有

<uses-permission android:name="android.permission.INTERNET" />
你的清单中的

答案 1 :(得分:0)

您永远无法通过Runtime.getRuntime()获取读取日志的权限。

Android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用才能获得它们。

更多详情:https://code.google.com/p/acra/issues/detail?id=100