Android: чтение журналов adb logcat через приложение - PullRequest
1 голос
/ 17 марта 2012

Я пытаюсь написать приложение, которое читает журналы, созданные adb logcat.Следуя коду на link1 и link2 , у меня есть следующий код:

try {
        Process process = Runtime.getRuntime().exec("logcat");
        System.out.println("Process : " + process); // shows process id
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        System.out.println("Buffered reader : " + bufferedReader.readLine());
        StringBuilder log = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            log.append(line);
        }
        TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(log.toString());
    } catch (IOException e) {
    }

Чтобы проверить, что читает буферизованный читатель, я поставил println, ноЯ получаю сообщение "Невозможно связать TCP: 5038".Приведенный выше код не читает никаких журналов.Я также попытался использовать «logcat *: V», но я не получил журналы даже самого низкого приоритета.

Я дал своему приложению разрешение: android.permission.READ_LOGS.

Я тестирую свойкод на эмуляторе Android.

Может кто-нибудь указать, что я делаю не так.

Спасибо за помощь.

РЕДАКТИРОВАТЬ :

Я попытался "logcat -d", и я получил одну строку журнала.В коде можно заметить, что был предоставлен блок try / catch; когда я удаляю разрешение READ_LOGS из приложения, исключение не возникает и bufferReader просто печатает ноль (обычно, когда приложение не находит разрешение, которое ему требуется, оно вызывает исключение). В чем причина такого поведения?

EDIT2:

Я попробовал Log.d (TAG, log.toString ()) и получилболее одной строки текста.Может кто-нибудь объяснить последний вопрос из предыдущего редактирования: когда я удаляю требуемое разрешение, почему приложение не вызывает исключение?

Ответы [ 2 ]

3 голосов
/ 28 марта 2014

Вы, вероятно, получаете сообщение "cannot bind tcp:5038" из-за отсутствия

<uses-permission android:name="android.permission.INTERNET" />

в манифесте

0 голосов
/ 27 января 2015

Вы никогда не сможете получить разрешение на чтение журналов через Runtime.getRuntime ().

Команда разработчиков Android решила прекратить предоставлять эти разрешения сторонним приложениям.Теперь их могут получить только системные приложения.

Подробнее: https://code.google.com/p/acra/issues/detail?id=100

...