Как запустить процесс запуска logcat на Android?

1

Я хочу прочитать файл журнала уровня системы Android. Поэтому я использую следующий код:

        Process mLogcatProc = null;
    BufferedReader reader = null;
    try {
        mLogcatProc = Runtime.getRuntime().exec(
                new String[] { "logcat", "-d",
                        "AndroidRuntime:E [Your Log Tag Here]:V *:S" });

        reader = new BufferedReader(new InputStreamReader(mLogcatProc
                .getInputStream()));

        String line;
        final StringBuilder log = new StringBuilder();
        String separator = System.getProperty("line.separator");

        while ((line = reader.readLine()) != null) {
            log.append(line);
            log.append(separator);
        }

    }

    catch (IOException e) {}
    finally {
        if (reader != null)
            try {
                reader.close();
            } catch (IOException e) {}

    }

Я также использовал в AndroidManifest.xml. Но я не могу прочитать ни одной строки. Журнал StringBuilder пуст. И метод mlogcatProc.waitFor return 0.

Итак, как я могу прочитать журнал?

  • 0
    Можете ли вы объяснить параметры ": V *: S"?
Теги:
logging
logcat

3 ответа

2

Код в исходном сообщении работает, если вы добавляете правильное разрешение на ваш AndroidManifest.xml

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

PS: Вы, конечно же, должны заменить "[Your Log Tag Here]" в своем коде своей фактической TAG; -)

2

не может делать это из обычного (несатого) приложения Android.

Это связано с тем, что процесс должен запускаться как root (или из adb) для чтения файла logcat на Android. Если на вашем [корневом] телефоне установлен эмулятор терминала, попробуйте запустить logcat - он запрещает вам разрешение на буфер журнала, если вы не используете его для root.

Причина, по которой ваш StringBuffer заканчивается пустым, заключается в том, что процесс выводит сообщение об ошибке в stderr (и вы читаете stdin через BufferedReader).

  • 0
    Благодарю. Но я прочитал сообщение об ошибке после вашего предложения. StringBuilder все еще пуст. Кстати, код находится в методе onCreate в Activity.
  • 0
    Извините, я должен сказать, что вы / не можете / читать журнал из обычного приложения для Android, потому что он должен быть запущен от имени пользователя root.
1

Посмотрите на источник для LogCollector, у вас должно быть решение вашей проблемы. http://code.google.com/p/android-log-collector/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню