Просмотр и анализ логов Android через ADB (logcat)

Краткий ответ: подключите устройство, включите USB‑отладку и выполните adb logcat, затем фильтруйте по уровню E или по пакету (например adb logcat | grep com.example) — в логах вы увидите стек‑трейсы и сообщения, по которым находят причину крашей, OOM, ANR и сетевых ошибок.

Установка ADB и подготовка устройства

  1. Скачайте Platform‑Tools и распакуйте в удобную папку (например ~/adb или C:\adb). Добавьте папку в PATH.
  2. Включите режим разработчика и USB‑отладку на телефоне: Настройки → О телефоне → 7x по «Номер сборки» → Опции разработчика → USB‑отладка.
  3. Подключите кабель, подтвердите запрос на устройстве и убедитесь, что терминал видит устройство:
   adb devices

В строке должно быть device. Если unauthorized — примите запрос на телефоне.

Если устройство не отображается — попробуйте другой кабель/порт, обновите USB‑драйверы (Windows) или перезапустите ADB: adb kill-server && adb start-server.

Основные команды logcat и полезные фильтры

  • Просмотр в реальном времени:
  adb logcat

Остановить — Ctrl+C.

  • Только ошибки:
  adb logcat *:E
  • Фильтр по пакету (пример для Linux/macOS):
  adb logcat | grep com.example.app
  • Очистить буфер:
  adb logcat -c
  • Сохранить дамп в файл:
  adb logcat -d > crash.log
  • Увеличить буфер:
  adb logcat -G 4M
  • Буферы и форматы:
  adb logcat -b all -v threadtime
  adb shell logcat -b radio   # радио/модем
  • Показывать последние N строк:
  adb logcat -t 200

Краткая таблица команд

КомандаЧто делаетКогда использовать
adb logcat *:EПоказывает только ошибкиБыстрый поиск крашей
adb logcat -cОчистить буферНачать чистую сессию
adb logcat -d > fileСохранить дампАнализ после краша
adb logcat -b radioРадио‑логиПроблемы сети/модема

Начать диагностику удобно с adb logcat *:E при воспроизведении ошибки — это сразу показывает FATAL/ERROR сообщения.

Что искать в логах и как это интерпретировать

Фокусируйтесь на строках с уровнями E или F и на стек‑трейсах.

  1. Краш приложения (FATAL EXCEPTION)
    • Пример:
     FATAL EXCEPTION: main
     Process: com.example.app, PID: 1234
     java.lang.NullPointerException: Attempt to invoke virtual method...
         at com.example.Class.method(Class.java:45)
     ```
   - Что делать: прочитать стек‑трейс, найти класс/строку, добавить null‑проверки или исправить логику.

2. OutOfMemoryError (OOM)
   - Признак: `java.lang.OutOfMemoryError` или `E/art: Out of memory`.
   - Действия: проверить утечки (битмапы, коллекции), получить `adb shell dumpsys meminfo com.example.app`, использовать профайлер.

3. ANR (Application Not Responding)
   - Признак: `ANR in com.example.app` и сообщения о блокировке главного потока.
   - Решение: вынести тяжёлые операции в фон, использовать `StrictMode` и профайлинг.

4. Сетевые ошибки
   - Признак: `Failed to connect` или ошибки в `radio` буфере.
   - Действия: проверить интернет/сервер, смотреть `adb logcat -b radio` и тайм‑ауты/исключения в коде.

5. Performance / Battery
   - Следите за тегами `PowerManagerService`, `BatteryStatsService`, `Choreographer` (фризы UI).

Полезные теги для мониторинга: `ActivityManager`, `WindowManager`, `AndroidRuntime`, `StrictMode`.

## Частые ошибки
- Неправильный кабель или USB‑порт — устройство не видимо.
- `adb` старой версии — обновите platform-tools.
- Фильтры скрывают нужные сообщения — временно отключите фильтры.
- Буфер маленький — увеличьте `adb logcat -G`.
- Попытки читать приватные логи без root — некоторые буферы/файлы доступны только с правами.

## FAQ
- Как быстро сохранить только последние ошибки?  
  Используйте `adb logcat -d *:E > errors.log`.
- Нужен ли root для logcat?  
  Нет — большинством функций можно пользоваться без рута. Некоторые служебные логи могут требовать root.
- Как найти стек‑трейс для конкретного процесса?  
  Фильтруйте по PID или по имени пакета: `adb logcat | grep "PID\|com.example.app"` или `adb logcat | grep com.example.app`.

---

Практика: начните с `adb logcat *:E`, воспроизведите проблему, сохраните дамп и по стек‑трейсу находите конкретный класс и строку — так вы выявите и исправите большинство ошибок за минуты.