Not all data shown when Android logcat is read programatically

给你一囗甜甜゛ 提交于 2019-12-28 04:15:07

问题


I have such a problem, I try to get data from logcat programatically. permission has also been added to manifest file:

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

Code:

    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();

However I cannot see when other apps are launched. I am waiting for strings like the one below but they do not appear.

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}

P.S. This code is run in service.


回答1:


I have bad news for you: as of JB, READ_LOGS don't just work as it did anymore:

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

(scroll to the post of Dianne Hackborn, an Android Develper) and this video:

Google I/O 2012 - Ten Things Game Developers Should Know

(22:47) for official sources.

However his has not been yet documented (the READ_LOGS permission doesn't report this) and is yet a source of confusion. You can only access your own logs now, and the good news is, you don't need to request permissions for it anymore (if your are targetting Jelly Beans, that's it...).

I guess it's a compromise the Android Dev team took to prevent malicious app from spying on the user, perhaps getting sensitive information (I wouldn't bet every app developer cleans it's own Log.d statements before release).

Hope this helps




回答2:


From Android Jelly Bean, applications cannot read log entries from other applications, unless your device is rooted and you read the logs as superuser.

So basically... This is the expected behavior.

I could not find any official statement in the Android documentation (someone can edit this answer if they do), but you might be interested in having a look at this answer: https://android.stackexchange.com/questions/28857/how-can-i-access-android-log-files-on-my-nexus-7-without-root-access



来源:https://stackoverflow.com/questions/16795582/not-all-data-shown-when-android-logcat-is-read-programatically

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!