ADB basics

Минимум по Android Debug Bridge, который полезен QA для логов, установки билдов и диагностики проблем.

Обновлено:

Содержание

ADB, Android Debug Bridge, — инструмент связи компьютера с Android-устройством или эмулятором. Для QA он полезен не только при падениях: можно установить сборку, собрать логи, получить снимок экрана и воспроизвести переход по ссылке без длинной последовательности ручных действий.

Команды имеют смысл, когда тестировщик понимает, какое состояние они меняют. Очистить данные, остановить процесс и обновить приложение — разные действия. Если смешивать их, легко случайно устранить предусловие дефекта и получить ложный успешный результат.

Как устроено подключение

ADB входит в Android SDK Platform Tools. На физическом устройстве нужно разрешённое подключение для отладки; при первом соединении пользователь подтверждает доверие компьютеру. Для QA предпочтительны выделенные тестовые устройства и согласованный доступ.

Первый диагностический шаг — список устройств. В примерах SERIAL обозначает реальный идентификатор, а com.example.app — пакет тестируемого приложения; эти значения нужно заменить.

bash
adb devices -l
adb -s SERIAL shell getprop ro.build.version.release

Статус unauthorized означает проблему доверия, offline — проблему соединения. Пока устройство не находится в рабочем состоянии, не стоит расследовать приложение через неуспешные команды установки.

Зачем указывать устройство явно

При подключении нескольких телефонов или эмуляторов используй параметр -s. Это уменьшает риск установить сборку или стереть данные на другом экземпляре. В автоматизированном прогоне выбранный serial должен попадать в журнал запуска.

Зафиксируй также модель, ОС и номер сборки приложения. Иначе даже правильный лог останется связанным с неопределённой конфигурацией, и воспроизведение у другого участника команды будет ненадёжным.

Установка и обновление

Обычная установка APK и замена существующей версии различаются. Флаг -r используется для переустановки с сохранением данных приложения; успешная замена требует совместимой подписи и соблюдения ограничений версии.

bash
adb -s SERIAL install app.apk
adb -s SERIAL install -r app-new.apk

После Success открой приложение и проверь номер сборки и контрольные данные. Команда установки не доказывает успешность миграции или доступность основного сценария. Набор split APK требует соответствующего способа установки; один случайный файл из набора не заменяет полноценный пакет.

Очистка, остановка и удаление

Эти команды удобно видеть рядом, чтобы не путать последствия. Они изменяют состояние устройства и должны выполняться только на выбранном тестовом пакете.

bash
adb -s SERIAL shell am force-stop com.example.app
adb -s SERIAL shell pm clear com.example.app
adb -s SERIAL uninstall com.example.app

Force-stop принудительно останавливает приложение. Pm clear удаляет его данные и меняет предусловия следующего запуска. Uninstall удаляет приложение. Ни одно из этих действий нельзя молча подставлять вместо обычного сворачивания или закрытия экрана.

Серверный аккаунт от этих команд не удаляется. Повторная установка также может включать восстановление резервной копии, поэтому исходное состояние нужно подтверждать отдельно.

Как собирать полезные логи

Logcat показывает журналы Android и приложений. Сбор лучше начинать до воспроизведения, чтобы сохранить события перед ошибкой. Для короткого управляемого опыта можно выгрузить текущий буфер в файл.

bash
adb -s SERIAL logcat -v threadtime > device-log.txt
adb -s SERIAL logcat -d -v threadtime > log-snapshot.txt

Первая команда работает непрерывно до остановки пользователем, вторая выгружает буфер и завершается. Полный журнал может содержать лишние данные, поэтому перед передачей проверь его и удали секреты. Фильтр по процессу полезен, но после перезапуска PID меняется; слишком узкий фильтр способен потерять сам момент падения.

Практический пример: падение после обновления

Представь, что приложение закрывается при открытии старой заметки. Нужно сохранить и исходные данные, и доказательства сбоя.

  1. 1.На согласованном устройстве установи старую сборку и создай заметку. Запиши её идентификатор и версию приложения.
  2. 2.Обнови через install -r, не выполняя pm clear. Ожидается сохранение пользовательского состояния.
  3. 3.Начни запись logcat, открой приложение и воспроизведи падение.
  4. 4.Останови запись, сохрани точное время действия и извлеки участок с исключением и предшествующими событиями.
  5. 5.Запусти приложение снова и проверь, воспроизводится ли проблема на том же объекте.
  6. 6.Приложи версии, serial или внутренний номер устройства, шаги и очищенный лог. Ожидаемый результат — доступность заметки после обновления.

Теперь разработчик получает наблюдаемую последовательность, а не только видео исчезнувшего экрана.

Снимки и системная диагностика

Снимок через ADB удобен для автоматического приложения к результату. Bugreport собирает более широкий диагностический пакет, поэтому требует внимания к объёму и содержимому.

bash
adb -s SERIAL exec-out screencap -p > screen.png
adb -s SERIAL bugreport bugreport.zip

Не собирай bugreport для каждой мелкой визуальной ошибки без необходимости. Выбирай минимальные доказательства, которые помогают понять конкретный дефект, и учитывай правила хранения диагностических данных команды.

Запуск ссылки для диагностики

Команда ACTION_VIEW помогает проверить маршрут. Не указывай пакет, если цель — наблюдать системный выбор обработчика ссылки.

bash
adb -s SERIAL shell am start -W -a android.intent.action.VIEW -d 'https://example.com/articles/123'

Это диагностический запуск. Его полезно дополнить нажатием на ссылку в реальном письме или браузере: источник перехода тоже влияет на пользовательский путь.

Типичные ошибки и вывод

Не начинай расследование с удаления данных, не используй force-stop как замену всем состояниям фона и не передавай гигантский лог без времени события. В каждой команде понимай цель, предусловия и эффект.

ADB усиливает QA, когда делает эксперимент воспроизводимым. Правильно выбранное устройство, сохранённое состояние и короткие информативные доказательства полезнее большого набора команд, выполненных без проверки результата.

Что ещё почитать