Как я могу заставить logcat на своем устройстве показывать журналы из всех процессов
Я пытаюсь написать приложение, которое читает все журналы на моем устройстве. У меня есть архитектура клиент/сервис, и я вижу сообщения журналов как с клиентского, так и с сервисным процессами, но я не вижу сообщений из каких-либо других приложений на телефоне (я вижу другие сообщения, используя logcat на рабочем столе).
Нужен ли мне корень?
Фрагменты кода
манифеста
<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
}
Ответы
Ответ 1
В Android 4.1+ вы можете получать доступ только к сообщениям журнала, зарегистрированным в вашем процессе, если только вы не держите разрешение READ_LOGS
. Это разрешение требует, чтобы ваше приложение было подписано одним и тем же ключом подписки, который подписывал прошивку устройства или что ваше приложение установлено на системном разделе.
Ответ 2
Чтобы программно читать журналы из других приложений, вам необходимо назначить один и тот же файл: sharedUserId во всех файлах манифеста apks.
Ответ 3
Существует еще один способ доступа ко всем журналам для всех приложений без root. Он требует включения удаленной отладки. Посмотрите открытое исходное приложение без корневого Logcat.