How can I get logcat on my device to show logs fro

2019-02-12 14:07发布

I'm trying to write an app that reads all logs on my device. I've got a client/service architecture, and I see log messages from both the client and service processes but I don't see any messages from any other applications on the phone (I do see other messages using the desktop logcat).

Do I need root?

Code Snippets

Manifest

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

Log Reader

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
}

3条回答
Rolldiameter
2楼-- · 2019-02-12 14:23

There is another way to access all logs for all applications without root. It requires enabling remote debugging. Take a look at the open source rootless Logcat app.

查看更多
不美不萌又怎样
3楼-- · 2019-02-12 14:31

To read logs from other applications programmatically, you will need to assign the same android:sharedUserId in all apks' manifest files.

查看更多
仙女界的扛把子
4楼-- · 2019-02-12 14:37

On Android 4.1+, you can only access log messages logged by your process, unless you hold the READ_LOGS permission. That permission requires either that your app be signed by the same signing key that signed the device's firmware, or that your app is installed on the system partition.

查看更多
登录 后发表回答