以编程方式读取 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 时,并非所有数据都显示的主要内容,如果未能解决你的问题,请参考以下文章