6

Jelly Bean 移除了读取其他应用程序日志的能力(根据这个I/O 谈话),这是一个明智的安全改进。但是,我需要阅读ActivityManager-logs 才能让我的应用程序正常工作(查看当前正在启动的应用程序)。为此,我正在使用

private static final String clearLogcat = "logcat -c";
private static final String logcatCommand = "logcat ActivityManager:I *:S";
//...

这不再有效,因为我只能在 Jelly Bean 中读取我自己的应用程序日志。是否有替代解决方案来找出另一个应用程序何时启动(除了根)?我理解为什么我们不应该能够读取其他应用程序的日志(有点 - 应该是其他开发人员的责任,以确保没有记录任何个人信息,而不是我的被阻止读取日志),但我不明白为什么ActivityManager框架类包含在该策略中...

谢谢,
尼克

4

2 回答 2

7

有一个关于这个问题的广泛讨论在这里。不幸的是,这是“预期行为”,因此无法修复。当前唯一的解决方案(用于从 JB 及更高版本的应用程序中读取日志)是通过 adb 手动授予应用程序权限:

adb shell pm grant <pkg> android.permission.READ_LOGS

如此授予的权限:

  • 在重新启动后幸存下来
  • 在应用程序更新中存活(即“adb install -r”)
  • 如果应用程序被卸载然后再次安装,则无法生存

很明显,这不是普通用户可以做的事情。Android 团队承诺提供 GUI 解决方案(用户可以从其设备的菜单授予此权限Settings),但不幸的是,在实施“修复”之前,该功能已被删除。

于 2012-08-09T13:31:20.750 回答
0

首先,ActivityManager它不是应用程序……它是构成 Android 应用程序框架一部分的类。

其次,如果 Android 团队故意不让这个功能发挥作用,那么我怀疑它周围存在安全漏洞。事实上,第三方应用程序不应该依赖 logcat 日志才能正常工作。如果您详细说明您需要阅读这些日志的原因,也许我们可以帮助您找到更好的解决方案。

于 2012-07-07T00:16:16.187 回答