【问题标题】:Reading ActivityManager-logs on a Jelly Bean device?在 Jelly Bean 设备上读取 ActivityManager 日志?
【发布时间】:2012-07-06 23:47:14
【问题描述】:

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

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

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

谢谢,
尼克

【问题讨论】:

    标签: android security android-activity android-logcat


    【解决方案1】:

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

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

    这样授予的权限:

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

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

    【讨论】:

    • 也许你应该详细说明为什么你必须首先阅读日志......几乎可以肯定有一个不涉及这样做的解决方案......
    • 你说得对 - 我只是想为来到这里的人们提供更多信息,以了解已删除的 READ_LOGS 权限(因为标题和我提出问题的方式)。
    • 需要注意的是pm grant只适用于模拟器或“开发”设备,不适用于生产设备
    【解决方案2】:

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

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

    【讨论】:

    • 实际上系统应用和第三部分应用在可用权限方面存在很大差异。 ActivityManager 实际上有两部分——在调用进程中运行的代码,以及在特权系统服务器进程中运行的代码。感兴趣的日志很可能来自后者。
    • @ChrisStratton,好吧,你是对的。我刚刚删除了整个第 2 段,因为我认为我没有最终决定 OP 的“系统应用程序”是什么意思。我不确定他是指“Google 制造的应用程序”(如 Google+ 或 Google 地图)还是构成应用程序框架的实际类。如果他说的是应用程序框架(我现在相信他是),那么你是对的。
    • 实际安装在系统分区或使用相同证书签名的“应用程序”可以获得常规第三方应用程序无法获得的权限。这个问题虽然更多的是关于非“应用程序”系统进程。大概日志隔离是在进程级别完成的;看看它是如何实现的会很有趣 - 最新发布的内核驱动程序源(即 android-omap-tuna-3.0-jb-pre1)似乎没有变化
    • 你显然比我更了解这方面......你可能是对的,日志隔离是在系统级别完成的......这对我来说更有意义现在我想起来了。我尽量不要过多地参与这里的内核/库/android运行时的东西......我想当我回答这个问题时我不知道自己在做什么:P
    • @Nick “如果它是用户想要的东西,即帮助他”......只有在其中一个日志被更改并且应用程序在他们眼前崩溃之前,用户才会感到满意。阅读日志从来都不是 Android SDK 的正式组成部分……所以从框架设计者的角度来看(他们的工作是编写一个安全、可维护的 API,它向后兼容旧版本,并且在新版本中非常健壮) t 破坏现有应用程序),Android 团队阻止 3rd 方应用程序读取这些日志是完全可以接受的。希望这更有意义...... :)
    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多