【问题标题】:How can I get logcat on my device to show logs from all processes如何在我的设备上获取 logcat 以显示来自所有进程的日志
【发布时间】:2013-04-25 19:06:06
【问题描述】:

我正在尝试编写一个可以读取我设备上所有日志的应用程序。我有一个客户端/服务架构,我看到来自客户端和服务进程的日志消息,但我没有看到来自手机上任何其他应用程序的任何消息(我确实看到使用桌面 logcat 的其他消息)。

我需要root吗?

代码片段

清单

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

日志阅读器

Runtime.getRuntime().exec("logcat -c").waitFor();

Process process = Runtime.getRuntime().exec("logcat -v long *:*");
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream()));
while (true) {
    String nextLine = reader.readLine();
    if (!nextLine.contains("LogWatcher-D")) {
        Log.w("LogWatcher-D", "See: " + nextLine);
    }

    // Process line
}

【问题讨论】:

    标签: android logcat


    【解决方案1】:

    在 Android 4.1+ 上,您只能访问由您的进程记录的日志消息,除非您持有 READ_LOGS 权限。该权限要求您的应用使用与设备固件签名相同的签名密钥进行签名,或者您的应用安装在系统分区上。

    【讨论】:

    • @Hounshell:AFAIK,没有。但是,root 设备的用户可以将您的应用移动到系统分区,在这种情况下,您可以持有READ_LOGS
    • @CommonsWare:那么如果你正常安装应用程序,在前面提到的权限下,你能看到的只有应用程序日志吗? (没有系统日志?)
    • @Campiador:正确,在 4.1 及更高版本上。
    • @CommonsWare:谢谢。我可以通过 UART 访问我设备的内核。你能告诉我将我的应用程序移动到哪个文件夹吗?我在网上搜索但找不到任何答案,因为我是 Linux 新手。
    • @Campiador:我没有亲自做过。我知道正确的位置在system 分区上,但仅此而已。对不起!
    【解决方案2】:

    要以编程方式从其他应用程序读取日志,您需要在所有 apk 的清单文件中分配相同的 android:sharedUserId。

    【讨论】:

    • 投了反对票,因为答案没有回答问题(所有日志),并且不如旧的、已经接受的答案完整。
    【解决方案3】:

    还有另一种方法可以在没有 root 的情况下访问所有应用程序的所有日志。它需要启用远程调试。看看开源rootless Logcat app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 2019-12-03
      • 2011-10-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多