我正在尝试编写一个可以读取设备上所有日志的应用。我有一个客户端/服务架构,我看到来自客户端和服务进程的日志消息,但我没有看到来自手机上任何其他应用程序的任何消息(我确实看到使用桌面logcat的其他消息)。 / p>
我需要root吗?
<uses-permission android:name="android.permission.READ_LOGS" />
Runtime.getRuntime().exec("logcat -c").waitFor();
Process process = Runtime.getRuntime().exec("logcat -v long *:*");
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
while (true) {
String nextLine = reader.readLine();
if (!nextLine.contains("LogWatcher-D")) {
Log.w("LogWatcher-D", "See: " + nextLine);
}
// Process line
}
答案 0 :(得分:12)
在Android 4.1+上,您只能访问由您的流程记录的日志消息,除非您持有READ_LOGS
权限。该权限要求您的应用程序必须使用签署设备固件的相同签名密钥进行签名,或者您的应用程序安装在系统分区上。
答案 1 :(得分:2)
要以编程方式从其他应用程序读取日志,您需要在所有apks的清单文件中分配相同的android:sharedUserId。
答案 2 :(得分:0)
还有另一种方法可以访问没有root的所有应用程序的所有日志。它需要启用远程调试。看一下开源rootless Logcat app。