从适用于 android 4.2+ 的应用程序中读取 android 上所有应用程序的日志

Posted

技术标签:

【中文标题】从适用于 android 4.2+ 的应用程序中读取 android 上所有应用程序的日志【英文标题】:Read logs from all apps on android from within an app for android 4.2+ 【发布时间】:2013-08-01 09:04:07 【问题描述】:

我相信应用在 4.2 之后的 android 中读取日志的方式已经发生了变化。但是我想知道我是否可以从当前版本的android应用程序中读取所有日志,包括来自logcat的系统日志?如果是,是否需要一些许可?

【问题讨论】:

【参考方案1】:

除非你扎根,否则自从 Jelly Bean 之后你就无法做到这一点。请参阅此Android bug report 和此related discussion。引用:

变化是第三方应用程序无法再读取 记录权限,但是每个应用程序都可以读取仅包含的日志 他们写的行,不需要任何许可。

请记住,访问日志从来不是 SDK 的一部分, 并且仍然不是 SDK 的一部分。如果你依赖它,即使 进行此更改后,您将面临将来崩溃的风险。 (和 这就是为什么这在文档中丢失的部分原因,它不是 SDK,因此实际上并没有真正记录它的地方 记录它会使它成为我们不使用的 SDK 的一部分 想。 :p)

此外,我们真的很希望开发人员不要将此作为许可 进一步滥用系统日志并喷出越来越多的东西 从他们的应用程序进入它。日志噪音一直是一个持续的问题 Android(不仅适用于第三方应用程序,我们总是很难发布 没有太多噪音的开源平台),如果事情继续下去 更糟的是,我们可能会对其进行进一步的更改以使其更好 控制它。

编辑:如果您可以访问设备,那么您可以在那里查看日志,甚至尝试向您的应用授予上述权限:

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

但在其他情况下,您会很不走运(除非您在框架中发现错误)

【讨论】:

但是系统应用呢?如果设备没有root。系统应用程序是否仍然能够以编程方式通过 logcat 读取其他应用程序的日志?【参考方案2】:

是的,你可以。你只需要一个根设备。

【讨论】:

我可以在没有根设备的情况下进行操作吗? @FD_ 请在根设备上举例)

以上是关于从适用于 android 4.2+ 的应用程序中读取 android 上所有应用程序的日志的主要内容,如果未能解决你的问题,请参考以下文章

Android DatePicker 按图像应用主题

从命令行开发适用于 Android 的 Qt 应用程序

从 kivy/python 程序创建适用于 Android 的 APK [重复]

如果从“最近”中删除应用程序,Android Oreo 接收器将停止

Android:如何在 android 4.2 上折叠状态栏? [复制]

无法从 Flutter Web 读取 Firestore 中的数据(适用于 iOS 和 android)