以编程方式读取 Android logcat 时,并非所有数据都显示

Posted

技术标签:

【中文标题】以编程方式读取 Android logcat 时,并非所有数据都显示【英文标题】:Not all data shown when Android logcat is read programatically 【发布时间】:2013-05-28 15:14:18 【问题描述】:

我有这样的问题,我尝试以编程方式从 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

附:此代码在服务中运行。

【问题讨论】:

安卓、Logcat ***.com/q/14932502/1012284 【参考方案1】:

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

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

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

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

(22:47) 获取官方来源。

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

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

希望对你有帮助

【讨论】:

【参考方案2】:

在 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

【讨论】:

以上是关于以编程方式读取 Android logcat 时,并非所有数据都显示的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在本机 C 中读取 logcat?

将android logcat数据写入文件

Android 日志系统分析(三):logcat

如何以编程方式播放 Android NFC 通知声音?

如何以编程方式启动 Google Assistant?

android如何以编程方式仅捕获应用程序中的日志条目