是否可以在本机 C 中读取 logcat?
Posted
技术标签:
【中文标题】是否可以在本机 C 中读取 logcat?【英文标题】:Is it possible to read logcat in native C? 【发布时间】:2014-02-15 16:53:17 【问题描述】:我在 Java 中看到了很多不同的方法来将 android logcat 消息转储到文件中,但我无法在 C 中找到一种方法。
是否可以以编程方式检索 C 中的消息并将它们转储到文件中?
【问题讨论】:
请注意,从 Android 4.1 开始,您将只能读取自己进程的消息,除非您的应用安装在系统分区上(例如,root 设备用户)。另请注意,在设备上以编程方式阅读 LogCat 从未得到 Google 的正式认可。 commonsware.com/blog/2012/07/12/read-logs-regression.html @CommonsWare :所以应用程序只能读取它自己的日志消息,但如果你从 shell 中读取所有日志消息?这有什么意义? Valentin 建议创建一个子 logcat 进程会给我所有 logcat 消息,不是吗? "如果您从 shell 执行此操作,您可以读取所有日志消息吗?" -- 如果“shell”是指adb shell
,那么是的。 “这有什么意义?” -- adb shell
以有权访问所有 LogCat 的用户身份运行。默认情况下,您的应用程序不会。 “Valentin 建议创建一个子 logcat 进程会给我所有 logcat 消息,不是吗?” -- 仅当您的应用程序安装在系统分区上并因此可以持有READ_LOGS
权限时。如果您的应用以超级用户权限运行(例如,由 root 设备用户),它也可能有效。
@Commonsware:因此无法以编程方式模拟(从本机 C)从 adb shell 调用 logcat;即以编程方式从 logcat 获取与通过打开 adb shell 并调用 logcat 获得的信息量相同的信息? (除非应用程序以超级用户权限运行或安装在系统分区上)
CommonsWare 是正确的。您可以从 logcat 源代码 (android.googlesource.com/platform/system/core/+/kitkat-release/…) 中看到,命令本身没有权限检查;除非您拥有正确的权限,否则内核驱动程序根本不会给您来自另一个应用程序的日志。在有根设备上,您可以su -c logcat
以提升的权限运行 shell 命令。
【参考方案1】:
创建一个子 logcat 进程,读取其 stdout 并使用 cstdio 将数据保存到文件。
这样一来,Android 与任何其他 linux 发行版没有什么不同。
【讨论】:
以上是关于是否可以在本机 C 中读取 logcat?的主要内容,如果未能解决你的问题,请参考以下文章