Быстрая отладка 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 и продвинутые приёмы

Базовые шаги:

  1. Проверьте lifecycle: создаётся ли View и добавляется ли в иерархию (getParent() != null).
  2. Логируйте клики и позиции: int[] p = new int[2]; view.getLocationOnScreen(p); Log.i("DebugView", "pos=" + p[0] + "," + p[1]);
  3. Для проблем с отрисовкой — временно включите рамку в 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.