10

我有这样的问题,我尝试以编程方式从 logcat 获取数据。清单文件中也添加了权限:

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

代码:

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Process process = Runtime.getRuntime().exec("logcat ActivityManager:I *:S");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    reactOnString(line);
                }
            } catch (IOException e) {
            }
        }
    }).start();

但是我看不到其他应用程序何时启动。我正在等待像下面这样的字符串,但它们没有出现。

2260-2566/system_process                 I/ActivityManager: Start proc com.android.email for activity com.android.email/.activity.MessageCompose: pid=6460 uid=10011 gids={50011, 3003, 1015, 1023, 1028}

PS 此代码在服务中运行。

4

2 回答 2

9

我要告诉你一个坏消息:从 JB 开始,READ_LOGS 不再像以前那样工作了:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/6U4A5irWang

(滚动到 Android 开发者 Dianne Hackborn 的帖子)和这段视频:

Google I/O 2012 - 游戏开发者应该知道的十件事

(22:47) 获取官方信息。

然而,他还没有被记录(READ_LOGS权限没有报告这一点)并且仍然是一个混乱的来源。您现在只能访问自己的日志,好消息是,您不再需要为其请求权限(如果您的目标是 Jelly Beans,就是这样……)。

我想这是 Android 开发团队为防止恶意应用程序监视用户而采取的妥协措施,可能会获取敏感信息(我敢打赌,每个应用程序开发人员都不会在发布前清理自己的 Log.d 语句)。

希望这可以帮助

于 2013-05-28T15:29:21.493 回答
3

在 Android Jelly Bean 中,应用程序无法从其他应用程序读取日志条目,除非您的设备已获得 root 权限并且您以超级用户身份读取日志。

所以基本上......这是预期的行为。

我在 Android 文档中找不到任何官方声明(如果有人可以编辑此答案),但您可能有兴趣查看此答案: https ://android.stackexchange.com/questions/28857/how -can-i-access-android-log-files-on-my-nexus-7-without-root-access

于 2013-05-28T15:29:10.613 回答