Проблемы с доступом к журналам сообщений в Jelly Bean с помощью aLogcat

Резюме

У меня возникли проблемы с доступом к сообщениям журнала K9 с помощью aLogcat, подробнее см. ниже. Я хотел бы знать следующее:

  • Почему сообщения журнала от K9 не отображаются в средстве просмотра журнала aLogcat?
  • Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу увидеть полный текст ошибок, возникающих при попытке синхронизации моих папок K9?
  • Могло ли что-то измениться в Jelly Bean, из-за чего ведение журнала K9 перестало работать?
  • Поскольку в целом aLogcat показывает очень мало сообщений, изменилось ли что-то в Jelly Bean, что может означать, что он больше не может получить доступ ко всем сообщениям?

Деталь

Недавно у меня были проблемы с подключением к K9. Мои папки не синхронизируются, и список папок заканчивается ошибками сокетов ( libcore.io.ErrnoException:) или ошибками ssl ( javex.net.ssl.SSLException:) и т. д., где должно быть время последней проверки . Я получаю разные сообщения в зависимости от того, какая проблема возникает в данный момент, но я не вижу полный текст сообщения об ошибке, поэтому трудно предположить, в чем может быть причина.

Подумав, что лог-файлы могут содержать больше информации, я выполнил инструкции из раздела Запись журнала отладки , включил ведение журнала отладки в K9, установил aLogcat и попытался посмотреть логи. К сожалению, какой бы буфер журнала я ни выбрал ( Main , Events или Radio ), сообщения от K9 отсутствуют.

Если я добавлю предложенный (k9|AndroidRuntime)фильтр регулярных выражений, я ничего не увижу ни в одном из журналов. Если я удалю его, то Main будет содержать в основном сообщения о сборке мусора, Events , похоже, будут содержать в основном сообщения от самого aLogcat, и я еще не видел сообщения журнала в Radio .

Если это имеет какое-то значение, я использую Nexus 7, но я бы подумал, что ведение журнала будет в стандартном месте, которое не изменится между версиями Android.

Ответы (2)

Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу увидеть полный текст ошибок, возникающих при попытке синхронизации моих папок K9?

Кажется, что нет возможности увидеть эти сообщения журнала на устройстве без root-доступа , но если у вас есть root-доступ, есть несколько вариантов: либо предоставить необходимые разрешения для aLogcat, либо рассмотреть возможность использования ужасного взлома TM для просмотра . их напрямую.

Просмотрите файлы журнала на своем ПК или рабочей станции черезadb

Если вы можете подключить свое Android-устройство к ПК или рабочей станции, вы можете получить доступ к журналам с помощью adbкоманды.

Чтобы сделать это в Windows, сначала вам нужно будет установить Android SDK (для чего потребуется Java SE SDK ) и добавить android-sdk\toolsи android-sdk\platform-toolsк системному пути . Затем включите отладку по USB на вашем Nexus 7, подключите его через USB и установите Android Composite ADB Interfaceandroid-sdk\extras\google\usb_driver (мне пришлось заставить Windows XP посмотреть здесь, она не нашла драйверы сама по себе) .

Подробнее о том, как приступить adbк работе без полной установки Android SDK или на компьютерах Mac или Linux, см . в превосходном ответе Иззи на вопрос « Есть ли минимальная установка ADB?».

Затем вы можете открыть оболочку (т.е. cmdокно) и выполнить команду:

adb logcat k9:V *:S AndroidRuntime:E
  • Я подтвердил, что это работает на моем Nexus 7 без рута.

Предоставление разрешений для aLogcat

Если у вас есть root-доступ , вы можете рассмотреть возможность предоставления READ_LOGSразрешения aLogcat , как предлагается в этом посте . aLogcat/CatLog/Lumberjack не работает? Сделайте это... на форуме xda-developers :

pm grant <pkg> android.permission.READ_LOGS

Чтобы предоставить это разрешение alogcatили alogcat.donate, вы должны использовать одну из следующих команд, в зависимости от того, используете ли вы версию для пожертвований или нет:

pm grant org.jtb.alogcat.donate android.permission.READ_LOGS
pm grant org.jtb.alogcat android.permission.READ_LOGS

Согласно одному сообщению на android-developers и билете , разрешение сохраняется при перезагрузке и обновлении, но не при удалении/переустановке.

К сожалению, поскольку для этого требуется root-доступ, независимо от того, запускаю ли я это на устройстве или на своем ПК (с префиксом adb shell), я просто получаю сообщение об ошибке:

Neither user 12345 nor current process has android.permission.GRANT_REVOKE_PERMISSION
  • Я не могу подтвердить, что это работает, так как мой Nexus 7 не был рутирован.

Подумайте об использовании ужасного хака TM

Если у вас есть root-доступ , вы можете рассмотреть возможность создания logcat setuid root и запуска logcat из оболочки устройства, как это предлагается в этом ответе на мой Как я могу получить доступ к файлам журнала Android на своем Nexus 7 без root-доступа? вопрос:

chmod 04755 /system/bin/logcat
logcat k9:V *:S AndroidRuntime:E
  • Опять же, я не могу подтвердить, что это работает, и я, вероятно, буду использовать его только в крайнем случае , учитывая последствия для безопасности.

Почему сообщения журнала от K9 не отображаются в средстве просмотра журнала aLogcat ?

Могло ли что-то измениться в Jelly Bean, из-за чего ведение журнала K9 перестало работать?

Поскольку в целом aLogcat показывает очень мало сообщений, изменилось ли что-то в Jelly Bean, что может означать, что он больше не может получить доступ ко всем сообщениям?

Похоже, это изменение в Jelly Bean, которое влияет на все приложения, которые могут пытаться читать файлы журнала.

По- видимому , разрешение READ_LOGS не предоставляется сторонним приложениям в Jelly Bean . Поскольку эта ссылка кажется ненадежной:

Сегодня я протестировал свое приложение на новейшем (api 16) эмуляторе, прежде чем выпустить его в Google Play. Оказалось, что Android теперь отказывается предоставлять это разрешение сторонним приложениям. Это странно, потому что я просмотрел все задокументированные изменения Jelly Bean и не смог найти ничего, что упоминало бы разрешение READ_LOGS.

и позже

Уровень защиты для READ_LOGS теперь «подпись|система|разработка». Новый синтаксис канала для protectionLevel также не задокументирован (см. http://code.google.com/p/android/issues/detail?id=34785 ).

Я подозреваю, что aLogcat видит только сообщения, созданные им самим, и это vm.

Для получения дополнительной информации см. ответ Flow на мой вопрос . Насколько активным должен быть файл системного журнала Jelly Bean?

IIRC adb logcatпо-прежнему может получить полный журнал Android на Jelly Bean.
Для этого не требуется root, но вам нужно включить adb на вашем устройстве (обычно в настройках разработчика).
@Flow - теперь я подтвердил, что могу просматривать журнал на своем ПК adb logcatоттуда, и соответствующим образом обновил свой ответ. Все еще расстраивает, что я не могу найти способ получить доступ к журналам без рут-доступа с самого устройства.
Весь смысл изменения журнала JB в том, что пользователь без полномочий root не может получить доступ к полному системному журналу.
@Flow - Да, и весь смысл сообщений журнала в том, что вы можете использовать их, чтобы узнать, что происходит. JB делает такое приложение, как aLogcat , довольно бессмысленным, поскольку теперь оно может получать доступ только к сообщениям журнала, которые оно создало самостоятельно!
Я создал простую утилиту для доступа к лог-файлам с ПК: gist.github.com/hrj/5983971 .
Кстати: для использования ADB не требуется ПК с Windows . Он также отлично работает на Mac — и я без проблем использую его на своем компьютере с Linux. Также не требуется полная установка SDK со всеми его зависимостями (см.: Существует ли минимальная установка ADB? ). Кроме того: отличный и исчерпывающий ответ :)
Спасибо @Izzy, я обновил свой ответ, чтобы сослаться на ваш ответ и сделать этот раздел более общим.
Спасибо, хорошая работа! Еще одна деталь: мой связанный ответ также относится к Windows. Полный SDK нужен не только для работы ADB :)
Вот почему я добавил к этому абзацу префикс « Для получения подробной информации о том, как настроить и запустить adb без полной установки Android SDK» . Я предпочитаю автономные ответы, поэтому я не хотел удалять свою процедуру, но я хотел выделить вашу в качестве альтернативы.
Спасибо! adb logcat k9:V *:S AndroidRuntime:Eпоказал мне трассировку утреннего сбоя ночью следующего дня! Лог был еще там!

Я видел такое поведение в K9, когда мой почтовый сервер обновлял сертификаты SSL. Исправление заключалось в том, чтобы долго нажимать на учетную запись, выбирать Account settings -> Fetching mail -> Incoming serverи просто переходить Nextпо страницам, чтобы подтвердить свои настройки, пока не появится всплывающее окно с сертификатом (это может не появиться, если с сертификатом все в порядке, у меня был неправильный виртуальный хост). Подтвердите сертификат и просто выполните остальные настройки, и ваша учетная запись должна начать работать.

@MarkBooth Возможно, вам следовало спросить об этом, мы обычно предпочитаем вопросы, которые не предполагают решения.
@MatthewRead Я должен согласиться с Марком здесь: 4 пункта в его резюме прямо указывают, что он хочет помочь с проблемой ведения журнала, и я также не вижу здесь «проблемы XY» (предполагаемое решение). K9 явно является просто примером, но, возможно, заголовок вопроса следует скорректировать, чтобы подчеркнуть его: «Использование logcat для определения причины проблем» будет соответствовать (и фокусироваться) лучше;)
@MarkBooth Да, tnx - теперь намного яснее. Также спасибо за подробный ответ! Пожалуйста, держите нас в курсе вашего прогресса.
Должен ли я удалить свой ответ, так как он полностью не по теме после редактирования и может быть отклонен?
Тебе решать, оник. Как я уже сказал изначально, я ценю, что вы нашли время опубликовать ответ, но теперь, когда я обновил вопрос, ваш ответ выглядит еще более неуместным. Я полагаю, вы всегда можете подождать и посмотреть, будет ли за него проголосовано ниже -3, чтобы вы могли получить значок давления со стороны сверстников . *8')