【问题标题】:Android: Reading adb logcat logs via applicationAndroid:通过应用程序读取 adb logcat 日志
【发布时间】:2012-03-17 15:19:45
【问题描述】:

我正在尝试编写一个应用程序来读取 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()) 并得到了不止一行文本。有人可以解释上一次编辑的最后一个问题:当我删除所需的权限时,为什么应用程序没有引发异常?

【问题讨论】:

  • 应该是 "logcat -d" afaik。但是您可能会收到 ANR,因为它不会停止读取日志。您需要在后台线程、AsyncTask 或类似的东西中移动读数。编辑:算了,没有 ANR。
  • @zapl 我已经编辑了问题。
  • 您的 TextView 可以显示多于 1 行 (android:singleLine) 吗?您也可以在执行tv.setText(log.toString()); 后尝试执行Log.d("TAG", log.toString()); 以验证它没有显示错误。还是有例外?如果是这样,请将其添加到您的问题中。
  • @zapl 当我使用 Log.d("TAG", log.toString());您能否也解释一下第二部分:当我从应用程序中删除权限时,为什么它不引发异常并简单地将日志作为 null 返回给缓冲区读取器?
  • 似乎Runtime#exec() 不会在命令无法执行的情况下抛出异常。 BufferedReader 没有什么可以读取的

标签: android logging android-logcat


【解决方案1】:

您可能会因为没有收到消息“cannot bind tcp:5038

<uses-permission android:name="android.permission.INTERNET" />

在您的清单中

【讨论】:

    【解决方案2】:

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

    android 开发团队决定停止向第三方应用授予这些权限。现在只有系统应用可以获取它们。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2019-01-29
      相关资源
      最近更新 更多