Трассировка системы Android — это основной метод глубокой диагностики проблем с производительностью, зависаниями интерфейса и повышенным энергопотреблением. В отличие от обычных логов, этот инструмент фиксирует временные метки событий ядра, работу потоков и взаимодействие драйверов в реальном времени. Это позволяет точно определить, какой процесс блокирует основной поток или вызывает переключение контекста.
Подготовка рабочего окружения
Для начала работы необходим компьютер с установленными инструментами разработки. Минимальный набор включает платформу Android SDK Platform-Tools, содержащую утилиты adb (Android Debug Bridge) и fastboot. После установки пакета пути к исполняемым файлам следует добавить в переменные среды операционной системы для удобства вызова из терминала.
На стороне мобильного устройства необходимо активировать режим разработчика и включить опцию «Отладка по USB». Без этого флага система безопасности заблокирует любое соединение с компьютером.
- Подключите смартфон качественным USB-кабелем, поддерживающим передачу данных.
- Убедитесь, что на ПК установлены актуальные драйверы для вашей модели устройства.
- При первом подключении подтвердите авторизацию компьютера на экране телефона, введя код подтверждения.
- Проверьте видимость устройства командой
adb devicesв терминале.
Важно: Использование отладки по USB несет риски утечки данных. Не подключайте устройство к публичным или недоверенным компьютерам, так как этот режим предоставляет широкий доступ к файловой системе.
Обратите внимание: для захвата событий ядра часто требуются права root. На стандартных пользовательских прошивках доступ к некоторым трейсам ограничен политиками SELinux. На инженерных сборках или эмуляторах эти ограничения обычно сняты.
Активация параметров профилирования
Одной только отладки по USB недостаточно для полноценного сбора данных. Перейдите в меню «Для разработчиков» и найдите раздел настройки трассировки. Здесь необходимо активировать пункты «Профилирование HW GPU» и «Включить трассировку системы». Эти флаги заставляют Android записывать временные метки для каждого кадра и системного вызова.
Гибкий контроль над собираемой информацией осуществляется через команды ADB. Вы можете указать конкретные подсистемы для логирования:
gfx: события отрисовки графики и работы графического процессора.network: активность сетевых интерфейсов и передача пакетов.input: обработка касаний, жестов и ввода с клавиатуры.view: жизненный цикл элементов интерфейса и расчет макетов.
Предупреждение: Одновременное включение большого количества категорий приводит к высокой нагрузке на процессор и быстрому заполнению буфера лога. Это может исказить результаты тестов или привести к потере важных данных.
Выбор инструмента: Systrace против Perfetto
Долгое время стандартом считалась утилита systrace, входящая в состав SDK. Она генерировала HTML-отчеты, но имела ограничения по длине буфера и количеству потоков. Начиная с Android 9, рекомендуется использовать Perfetto — более современный инструмент с архитектурой, позволяющей писать данные напрямую в файл без потери информации при длительных сессиях.
Для запуска записи через командную строку используется команда adb shell. Процесс выглядит следующим образом:
- Запускается запись трассы с указанием длительности и конфигурации.
- На устройстве воспроизводится сценарий, вызывающий проблему (например, прокрутка ленты).
- Запись останавливается, и полученный бинарный файл переносится на компьютер.
Анализ данных выполняется в браузере через онлайн-инструмент ui.perfetto.dev. Он предоставляет детализированную временную шкалу всех процессов.
Пример скрипта автоматизации
Для регулярного тестирования удобно использовать скрипты Bash или PowerShell, которые стандартизируют процесс отладки и исключают человеческий фактор.
echo "Запуск трассировки на 10 секунд..."
adb shell perfetto -t 10s -c /data/misc/perfetto/base_config.pbtxt -o /sdcard/trace_$(date +%s).perfetto-trace
echo "Извлечение файла..."
adb pull /sdcard/trace_*.perfetto-trace ./traces/
При использовании автоматизации убедитесь, что на устройстве достаточно свободного места во внутреннем хранилище, иначе запись может прерваться.
Анализ полученных данных
После открытия файла в визуализаторе вы увидите горизонтальные дорожки, соответствующие отдельным процессам. Основные признаки проблем:
- Фризы интерфейса: разрывы в цепочке кадров или длинные участки ожидания службы SurfaceFlinger.
- Цветовая маркировка: красный цвет указывает на критические задержки, желтый — на предупреждения, зеленый — на нормальную работу.
- Jank: если время рендеринга кадра превышает 16.6 мс (для дисплея 60 Гц), пользователь заметит подергивание.
Проведите по таблице влево, чтобы увидеть остальные столбцы
| Категория события | Описание | Влияние на систему |
|---|---|---|
| Context Switch | Переключение процессора между потоками | Высокое (при частом повторении) |
| Lock Contention | Ожидание освобождения блокировки | Критическое (вызывает зависания) |
| GC Pause | Остановка для сборки мусора | Среднее (зависит от длительности) |
| Binder Transaction | Межпроцессное взаимодействие | Низкое (если нет циклических вызовов) |
Типичные ошибки и диагностика
При работе с трассировкой часто возникают следующие проблемы:
- Permission denied: ошибка доступа к категориям трасс. Решение — использование прав root на инженерных сборках или проверка политик SELinux.
- Пустой файл: возникает при неверном выборе категорий, переполнении буфера или случайном отключении отладки по USB во время записи.
- Несовместимость формата: если визуализатор не открывает файл, обновите версию Perfetto UI в браузере. Используйте команду
adb pullвместо ручного копирования через файловый менеджер для сохранения целостности данных.
Часто задаваемые вопросы
Нужен ли root-доступ для базовой трассировки?
Для большинства пользовательских сценариев и анализа работы приложений права суперпользователя не требуются. Однако для изучения событий ядра и драйверов root-доступ необходим, так как эти данные защищены политиками безопасности.
Сколько места занимают файлы трасс?
Объем файлов варьируется от нескольких мегабайт до гигабайт в зависимости от длительности записи и количества отслеживаемых категорий. Рекомендуется удалять старые файлы, если они не содержат уникальных данных об ошибке, чтобы освободить место на устройстве.
Можно ли проводить трассировку на работающем устройстве?
Да, это стандартная практика. Трассировка предназначена для работы на живых устройствах. Однако активная запись данных может вызвать дополнительный нагрев и расход батареи, что в редких случаях способно немного исказить результаты тестов производительности.