Android 如何让设备上的logcat显示所有进程的日志

Android 如何让设备上的logcat显示所有进程的日志,android,logcat,Android,Logcat,我正在尝试编写一个可以读取我设备上所有日志的应用程序。我有一个客户机/服务体系结构,我可以看到来自客户机和服务流程的日志消息,但我看不到来自手机上任何其他应用程序的任何消息(我确实可以使用桌面logcat看到其他消息) 我需要根吗 代码片段 显示 在Android 4.1+上,您只能访问进程记录的日志消息,除非您持有READ_LOGS权限。该权限要求您的应用程序由签署设备固件的同一签名密钥签名,或者您的应用程序安装在系统分区上。要以编程方式从其他应用程序读取日志,您需要在所有APK的清单文件中分

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

我需要根吗

代码片段 显示
在Android 4.1+上,您只能访问进程记录的日志消息,除非您持有
READ_LOGS
权限。该权限要求您的应用程序由签署设备固件的同一签名密钥签名,或者您的应用程序安装在系统分区上。

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

还有另一种方法可以访问所有应用程序的所有日志,而不使用root。它需要启用远程调试。看看开源软件。

@Hounshell:AFAIK,不。但是,根设备的用户可以将你的应用程序移动到系统分区,在这种情况下,你可以持有
读取日志
@commonware:因此,如果你在上述权限下正常安装应用程序,你能看到的只有应用程序日志?(没有系统日志?@Campiador:正确,在4.1及更高版本上。@commonware:谢谢。我可以通过UART访问设备的内核。你能告诉我将我的应用程序移动到哪个文件夹吗?我在网上搜索了一下,但没有找到任何答案,因为我是一个Linux noobie。@Campiador:我没有亲自做过。我知道正确的位置在
系统
分区上,但仅此而已。很抱歉投票被否决,因为答案没有回答问题(所有日志),并且没有旧的、已经被接受的答案完整。
<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
}