Просмотр и анализ логов Android через ADB (logcat)
Краткий ответ: подключите устройство, включите USB‑отладку и выполните adb logcat, затем фильтруйте по уровню E или по пакету (например adb logcat | grep com.example) — в логах вы увидите стек‑трейсы и сообщения, по которым находят причину крашей, OOM, ANR и сетевых ошибок.
Установка ADB и подготовка устройства
- Скачайте Platform‑Tools и распакуйте в удобную папку (например
~/adbилиC:\adb). Добавьте папку в PATH. - Включите режим разработчика и USB‑отладку на телефоне: Настройки → О телефоне → 7x по «Номер сборки» → Опции разработчика → USB‑отладка.
- Подключите кабель, подтвердите запрос на устройстве и убедитесь, что терминал видит устройство:
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 и на стек‑трейсах.
- Краш приложения (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`, воспроизведите проблему, сохраните дамп и по стек‑трейсу находите конкретный класс и строку — так вы выявите и исправите большинство ошибок за минуты.