Отладка по ADB

ADB (Android Debug Bridge) — консольная клиент-серверная программа, выполняет роль универсального интерфейса для управления Android-устройствами (или их эмуляторами).

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

Однако главное назначение ADB — это отладка приложений и сервисов при их разработке и тестировании. В этом случае взаимодействие с устройством осуществляется через консоль.

Возможности ADB:

  • просмотр подключенных устройств;
  • просмотр логов;
  • копирование файлов;
  • установка и удаление приложений;
  • скриншоты (и запись видео) экрана устройства;
  • удаление и перепрошивка раздела data;
  • запуск различных скриптов;
  • управление сетевыми параметрами.

В состав ADB входит три компонента:

  • клиент, который запускается на компьютере и отправляет команды. Его можно вызвать его из командной строки, введя команду adb;
  • демон, который запускается как фоновый процесс на Android-устройстве и выполняет команды клиента;
  • сервер, который работает в фоне на компьютере и управляет клиентом и демоном.

Как работает ADB:

  • при запуске adb-клиент проверяет наличие запущенного процесса adb-сервера, и если нет — запускает его на компьютере;
  • сервер устанавливает соединение на порту 5037 и слушает на нем команды от adb- клиентов;
  • затем сервер устанавливает соединения со всеми работающими устройствами, сканируя нечетные порты в диапазоне от 5555 до 5585. Для каждого устройства используется пара последовательных портов — порт с четным номером для соединений консоли, порт с нечетным номером — для соединений adb;
  • после того как сервер настроил соединения с устройствами, можно использовать команды adb для доступа к ним.

Подготовка к использованию

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

  • установить ADB на компьютере (драйвер для вашего Android-устройства, а так же пакет Android SDK Platform Tools);
  • на Android-устройстве включить отладку по USB, а затем подключить его к компьютеру кабелем (или настроить отладку по Wi-Fi).

Установка ADB

На устройствах под управлением Windows, установите драйвер для вашего Android-устройства.

Драйвера для устройств Google
OEM USB драйвера сторонних производителей

Если драйвера для вашего устройства не нашлось на указанных страницах, попробуйте поискать его на сайте производителя.

Для MacOS и Linux установка драйверов не требуется.

Далее потребуется установить Android SDK Platform Tools. Если вы используете Android Studio, скорее всего SDK Platform Tools у вас уже установлен.

Установка ADB в Windows

Скачайте SDK Platform Tools и распакуйте папку platform-tools на диск (рекомендуется в С:\platform-tools).

В системную переменную Path добавьте путь к распакованной папке, для этого:

  • перейдите в Панель управленияСистема и безопасностьСистема;
  • выберите пункт Дополнительные параметры системы;
  • нажмите кнопку Переменные среды;
  • в поле Системные переменные выберите значение Path и нажмите кнопку Изменить, чтобы добавить новое значение;
  • укажите путь к папке platform-tools содержащую adb;
  • перезагрузите компьютер.

Установка ADB в Linux

Чтобы установить SDK Platform Tools в Ubuntu выполните следующую команду.

apt-get install adb

или

sudo apt-get install android-tools-adb 

Либо вручную скачать SDK Platform Tools, распаковать на диск и добавить путь к распакованной папке с platform-tools в переменную среды $PATH.

Установка ADB в MacOS

Самый простой способ установить SDK Platform Tools на MacOS, используя Homebrew.

brew cask install android-platform-tools

Либо установить вручную.

Сперва удалите предыдущую версию android-platform-tools, если такая имеется.

rm -rf ~/.android-sdk-macosx/

Затем скачайте SDK Platform Tools.

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

cd ~/Downloads/
unzip platform-tools_*.zip
mkdir ~/.android-sdk-macosx
mv platform-tools/ ~/.android-sdk-macosx/platform-tools

Добавить путь к platform-tools в переменную среды $PATH.

echo 'export PATH=$PATH:~/.android-sdk-macosx/platform-tools/' >> ~/.bash_profile

Обновите bash профиль или перезапустите терминал.

source ~/.bash_profile

Проверка ADB

Зайдите в консоль и введите следующую команду:

adb version

Если все сделали верно, в ответ в консоль будет выведена информация о версии ADB.

Как включить отладку по USB на Android

Отладка по USB включается в настройках системы в разделе Параметры разработчика.

На Android 4.2 и выше раздел параметров разработчика по умолчанию скрыт. Чтобы сделать его видимым, перейдите в НастройкиО телефоне и нажмите Номер сборки (в редких случаях Номер модели) 7 раз (в редких случаях 10). На экране отобразится уведомление «Теперь вы разработчик!«

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

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

Подробнее о параметрах разработчика на устройствах Android можно ознакомится на developer.android.com.

Отладка Android по Wi-Fi

Для начала разрешите на Android устройстве отладку по USB, как описано в предыдущем разделе.

Устройство и компьютер должны быть в одной Wi-Fi сети. Убедитесь, что ваш брандмауэр или антивирусное не блокирует adb соединения.

Подключите устройство к компьютеру с помощью USB кабеля.

Разрешите устройству принимать соединения TCP/IP через порт 5555. Для этого выполните в командной строке следующую команду.

adb -d tcpip 5555

Параметр -d отправит команду только на устройство подключенное через USB.

В ответ должно появиться сообщение restarting in TCP mode port: 5555.

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

adb -s 9A301FFAZ00DQT tcpip 5555

Узнать серийный номер и получить информацию о подключенных устройствах можно следующей командой.

adb devices -l

После того, как разрешите устройству принимать соединения TCP/IP через порт 5555, отсоедините кабель USB от компьютера.

Далее понадобится узнать ip-адрес вашего Android-устройства.

Например, для устройств Nexus, ip-адрес можно посмотреть в разделе НастройкиО телефоне (О планшете) — СтатусIP-адрес. Иногда ip-адрес указан в настройках Wi-Fi.

Подключитесь к устройству по его ip-адресу.

adb connect device_ip_address

Убедитесь, что устройство появилось в списке.

adb devices

Теперь можно выполнять отладку по Wi-Fi, без использования кабеля.

Если соединение ADB потеряно. Убедитесь, что устройство и компьютер все еще подключены к одной Wi-Fi сети. Переподключитесь, выполнив adb connect снова. Или, если не поможет, перезагрузите хост adb:

adb kill-server

Затем повторите попытку.

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

Команды ADB

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

adb devices -l

В ответ adb выведет серийный номер, состояние и описание (параметр -l) подключенных устройств.

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

$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo

Если запущен только один эмулятор или подключено только одно устройство, команда adb отправится на это устройство по умолчанию. Если же запущено несколько эмуляторов и / или устройств, необходимо использовать параметры -d, -e или -s, чтобы указать устройство, на которое должна быть направлена команда.

Нижеприведенная команда отправится на устройство с указанным серийным номером.

adb -s серийный_номер_устройства

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

adb -d 

Команда отправится на устройство в эмуляторе. Выдаст ошибку, если подключено больше одного эмулятора.

adb -e 

Подсоединиться к андроид хосту по протоколу TCP/IP (по умолчанию порт 5555, если не указан другой).

adb connect хост:порт

Отсоединиться от андроид подключенного через TCP/IP (по умолчанию порт 5555). Если не задан ни один параметр, отключиться от всех активных соединений.

adb disconnect хост:порт

Перезапуск демона с правами root.

adb root

В некоторых случаях может потребоваться остановить сервер adb, и перезапустить его, чтобы решить проблему (например, если adb не отвечает на команды).

Остановить сервер.

adb kill-server

Запустить сервер.

adb start-server

Копировать файл или папку на устройство.

adb push "путь на PC" "путь на андроид"

Например,

adb push foo.txt /sdcard/foo.txt

Копировать файл или папку с устройства на компьютер.

adb pull "путь на андроид" "путь на PC"

Копировать с компьютера на устройство только новые файлы. С ключом -l не копировать, только создать список.

adb sync каталог

Установить приложение на устройство.

adb install [-l] [-r] [-s] название_приложения.apk

Например,

adb -s 9A301FFAZ00DQT install ~/Downloads/mobyandex-master-arm_6_45.apk
 

Ключи:
-l блокировка приложения;
-r переустановить приложение, с сохранением данных;
-s установить приложение на карту памяти.

Чтобы удалить приложение с устройства используйте следующую команду.

adb uninstall [-k] название_приложения.apk

Ключ -k означает, не удалять сохраненные данные приложения и пользователя.

Сделать скриншот экрана устройства.

adb shell screencap /sdcard/screen.png

Полученный скриншот можно сразу забрать на компьютер.

adb pull /sdcard/screen.png

Для записи видео с экрана устройства используйте команду screenrecord.

adb shell screenrecord /sdcard/demo.mp4

или с параметрами

adb shell screenrecord --size 1920x1080 --bit-rate 6000000 --time-limit 20 --verbose /sdcard/video.mp4
adb pull /sdcard/video.mp4

Чтобы остановить запись используйте комбинацию клавиш Control + C (Command + C на Mac). По умолчанию максимальный лимит для видео составляет 3 минуты.

С полным списком команд adb можно ознакомиться на сайте developer.android.com.

ADB LogCat

Logcat — инструмент для работы с логами Android.

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

adb logcat

или через shell

adb shell
# logcat

Для остановки сбора логов нажмите Ctrl+C на клавиатуре (Command + C на Mac).

Чтобы вывести лог на экран и выйти из logcat используйте параметр -d.

В записях лога в Android указан приоритет:

  • V — verbose (низший приоритет);
  • D — debug;
  • I — info;
  • W — warning;
  • E — error;
  • F — fatal;
  • S — silent (наивысший приоритет, ничего не выводится).

Фильтровать сообщения по приоритету можно следующим образом.

adb logcat '*:W'

Кроме приоритета у записей указан тэг компонента системы, от которого принято сообщение.

В дополнение к тэгу и приоритету в логе так же содержатся поля с метаданными. Формат можно изменять с помощью параметра -v, за которым следует один из нижеперечисленных форматов вывода:

  • brief — показывать приоритет, тэг и PID процесса (формат по умолчанию);
  • process — показывать только PID;
  • tag — показывать только приоритет, тэг;
  • thread — показывать только процесс, поток и приоритет, тэг;
  • raw — показать необработанное сообщение, без полей метаданных;
  • time — показывать дату, время вызова, приоритет, тэг и PID процесса;
  • long — показывать все поля метаданных и отдельно сообщения с пустыми строками.
adb logcat -v thread -d > C:\logcat.txt

Список параметров команды logcat:

-d вывести лог на экран и выйти;
-b загрузить альтернативный буфер лога для просмотра, такой как event или radio;
-c очистить лог и выйти;
-f записать сообщения лога в файл. По умолчанию в stdout;
-g вывести размер указанного буфера лога и выйти;
-n установить максимальное количество ротаций лога;
-s устанавливает silent фильтром по умолчанию;
-v устанавливает формат вывода сообщений лога. По умолчанию brief.

С полным списком команд logcat можно ознакомиться на сайте developer.android.com.

ADB Shell

Android полноценная система Unix со своим Shell, к которому можно подключаться по adb.

adb shell

или

adb [-d | -e | -s serial_number] shell

Команда подключит ваш терминал к shell устройства и вы сможете взаимодействовать с ним используя Unix команды, cat, ls, df и другие, а также запускать скрипты.

Чтобы выполнить одну команду, не переходя в shell используйте команду оболочки следующим образом.

adb shell shell_command

Например,

adb shell df 

Команда выше выдаст информацию о количестве свободной памяти на устройстве.

Следующая команда откроет на устройстве экран с настройками.

adb shell am start -a android.settings.SETTINGS

А две последующие через ADB включают и отключают соответственно прокси в настройках сети.

adb shell settings put global http_proxy 192.168.1.10:8888 (тут ip и порт вашего прокси)
adb shell settings put global http_proxy :0 (отключает прокси)

Данные команды могут быть полезными, когда к настройкам устройства нет явного доступа, например на устройствах с голосовыми интерфейсами. Я часто пользуюсь ими при отладке Яндекс.Станции.

Полезные ссылки

Android Debug Bridge
Что такое ADB
Утилита Android Debug Bridge
Run apps on a hardware device
SDK Platform Tools
Configure on-device developer options
Logcat command-line tool
Set up ADB on Mac OS X

На этом всё. Но вы можете помочь проекту. Обещаю писать больше полезных статей.

А если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.