Быстрая отладка UI в Android: что смотреть и когда
Используйте Logcat для текстовых логов и ошибок, Layout Inspector для визуальной иерархии и инспекции атрибутов, а для кастомных View — комбинируйте логи, onDraw и отладочные теги: это быстро выявит и исправит UI‑баги.
Оглавление
Logcat — быстрые логи и фильтры
Что: текстовые логи приложения и системы, уровни VERBOSE/DEBUG/INFO/WARN/ERROR.
Как начать:
- Подключите девайс (USB‑отладка) или запустите эмулятор.
- В Android Studio: View → Tool Windows → Logcat. Выберите устройство и процесс приложения.
- Установите фильтр по пакету (например, com.example.app), по тегу или по уровню.
Практические приёмы:
- Логируйте конкретные события UI: Log.d("UI", "Adapter set, items=" + adapter.getItemCount());
- Для экспорта: иконка дискеты в окне Logcat или adb logcat -v threadtime > logs.txt.
- Фильтры: используйте regexp для сложных запросов, например для поиска исключений и stacktrace.
Добавляйте в код короткие и информативные логи: Log.d("MyTag", "Button click id=" + v.getId() + " x=" + x); — это сильно ускорит поиск проблем.
Layout Inspector — как посмотреть и что искать
Что: визуальная инспекция иерархии View, размеры, margins, visibility, applied attributes и 3D‑вид дерева.
Как пользоваться:
- Запустите приложение в debug‑режиме.
- В Android Studio: Tools → Layout Inspector → выберите процесс.
- Навигация: клик по узлу в дереве подсветит View на экране; справа — атрибуты (layout_width, padding, margin, id).
На что смотреть:
- Неправильные размеры и constraints (wrap_content vs match_parent).
- Visibility и elevation (кнопка "скрыта" behind another view).
- Overdraw: включите Bounds Layer и ищите красные зоны.
- Touch‑conflicts: если View не реагирует, инспектор покажет parent, interceptors и enabled/Clickable флаги.
Layout Inspector ограничен для некоторых release‑сборок и старых API; на старых устройствах придётся использовать альтернативы или debug‑сборку.
Отладка View и продвинутые приёмы
Базовые шаги:
- Проверьте lifecycle: создаётся ли View и добавляется ли в иерархию (getParent() != null).
- Логируйте клики и позиции: int[] p = new int[2]; view.getLocationOnScreen(p); Log.i("DebugView", "pos=" + p[0] + "," + p[1]);
- Для проблем с отрисовкой — временно включите рамку в onDraw: canvas.drawRect(getLeft(), getTop(), getRight(), getBottom(), debugPaint);
Кастомные View:
- Переопределите onMeasure/onLayout с дополнительными логами.
- В onDraw рисуйте отладочные области (hit‑rect, baseline).
- Используйте view.setTag("debug‑id") в DEBUG и ищите по этому тегу в Inspector.
Продвинутые техники:
- ViewDebug‑аннотации для удобного отображения enum/битфлагов в инспекторах.
- Инструменты: включите StrictMode для выявления операций ввода/вывода в UI‑потоке.
- ADB over Wi‑Fi (adb tcpip 5555; adb connect IP:5555) — удобно для тестирования на реальных устройствах без кабеля.
Сравнение инструментов отладки UI
Сравнение инструментов отладки UI
| Инструмент | Показывает | Когда использовать | Ограничения |
|---|---|---|---|
| Logcat | Текстовые логи, ошибки, lifecycle | Быстрый поиск ошибок и исключений | Нет визуального контекста |
| Layout Inspector | Иерархия View, размеры, атрибуты, overdraw | Проблемы размещения и видимости | Требует debug‑процесса, не всегда доступен на старых API |
| Отладка View (логи + onDraw) | Поведение кастомных View, hit‑rects | Кастомные компоненты и touch‑issues | Требует изменения кода |
| Profiler (CPU/GPU) | FPS, время рендера, память | Анимации, лаги рендеринга | Нагрузка на устройство |
Частые ошибки
- "View not attached to window manager" — пытаетесь обновить UI после удаления; проверьте getParent() и вызовы в onDetachedFromWindow().
- Низкий FPS — проверьте heavy layout и overdraw; используйте GPU Rendering Profiler.
- Некорректные размеры в RecyclerView — пропущен setAdapter() или неверный LayoutManager.
- Touch‑конфликты — parent intercepts touch: проверьте requestDisallowInterceptTouchEvent и onInterceptTouchEvent.
Для продакшена используйте агрегаторы (crash/trace) для сбора ошибок и показателей производительности — они помогут найти паттерны, не видимые локально.
FAQ
- Как быстро отследить, почему кнопка не отображается?
- Откройте Layout Inspector, найдите кнопку в дереве, проверьте visibility, bounds и elevation; затем проверьте логи на ошибки inflate.
- Можно ли смотреть Layout Inspector без Android Studio?
- Нативно — нет; нужны инструменты SDK или сторонние решения, но удобнее в Android Studio.
- Как увидеть overdraw на устройстве?
- Включите показы границ и overdraw visualization в Developer options на устройстве или смотрите overlay в Layout Inspector.
Теперь у вас есть набор конкретных шагов: используйте Logcat для текстовых следов, Layout Inspector для визуального анализа и прямые правки/логи в кастомных View — вместе они закрывают почти все проблемы UI.