Мост отладки Android (adb)

Android Debug Bridge ( adb ) — это универсальный инструмент командной строки, позволяющий взаимодействовать с устройством. Команда adb упрощает выполнение различных действий на устройстве, таких как установка и отладка приложений. adb предоставляет доступ к оболочке Unix, которую можно использовать для выполнения различных команд на устройстве. Это клиент-серверная программа, включающая три компонента:

  • Клиент , отправляющий команды. Клиент работает на компьютере разработчика. Вы можете вызвать клиент из командной строки терминала, выполнив команду adb .
  • Демон (adbd) , который выполняет команды на устройстве. Демон работает в фоновом режиме на каждом устройстве.
  • Сервер , управляющий взаимодействием между клиентом и демоном. Сервер работает в фоновом режиме на компьютере, где выполняется разработка.

adb входит в пакет Android SDK Platform Tools. Загрузите этот пакет с помощью SDK Manager , который установит его в папку android_sdk /platform-tools/ . Если вам нужен отдельный пакет Android SDK Platform Tools, скачайте его здесь .

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

Как работает adb

При запуске клиента adb он сначала проверяет, запущен ли процесс adb -сервера. Если его нет, он запускает этот процесс. При запуске сервера он подключается к локальному TCP-порту 5037 и прослушивает команды, отправляемые клиентами adb .

Примечание: все клиенты adb используют порт 5037 для связи с сервером adb .

Затем сервер устанавливает соединения со всеми запущенными устройствами. Он находит эмуляторы, сканируя нечётные порты в диапазоне от 5555 до 5585, который используется первыми 16 эмуляторами. Если сервер обнаруживает демон adb (adbd), он устанавливает соединение с этим портом.

Каждый эмулятор использует пару последовательных портов: чётный порт для консольных подключений и нечётный порт для подключений adb . Например:

Эмулятор 1, консоль: 5554
Эмулятор 1, adb : 5555
Эмулятор 2, консоль: 5556
Эмулятор 2, adb : 5557
и так далее.

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

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

Включите отладку adb на вашем устройстве

Чтобы использовать adb с устройством, подключенным по USB, необходимо включить отладку по USB в системных настройках устройства в разделе «Параметры разработчика» . В Android 4.2 (уровень API 17) и выше экран «Параметры разработчика» по умолчанию скрыт. Чтобы сделать его видимым, включите «Параметры разработчика».

Теперь вы можете подключить устройство по USB. Вы можете убедиться в его подключении, выполнив команду adb devices из каталога android_sdk /platform-tools/ . Если устройство подключено, вы увидите его имя в строке «device».

Примечание: При подключении устройства под управлением Android 4.2.2 (уровень API 17) или выше система выводит диалоговое окно с вопросом о принятии ключа RSA, разрешающего отладку через этот компьютер. Этот механизм безопасности защищает пользовательские устройства, гарантируя, что отладка по USB и другие команды ADB не будут выполнены, пока вы не разблокируете устройство и не подтвердите диалоговое окно.

Дополнительную информацию о подключении к устройству через USB см. в статье Запуск приложений на аппаратном устройстве .

Подключитесь к устройству по Wi-Fi

Примечание: Приведённые ниже инструкции не применимы к устройствам Wear под управлением Android 11 (API уровня 30). Подробнее см. в руководстве по отладке приложений Wear OS .

Android 11 (API уровня 30) и выше поддерживают беспроводное развёртывание и отладку приложений с рабочей станции с помощью Android Debug Bridge (adb). Например, вы можете развернуть отлаживаемое приложение на нескольких удалённых устройствах без необходимости физического подключения устройства по USB. Это устраняет необходимость решать распространённые проблемы с USB-подключением, такие как установка драйверов.

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

  • Убедитесь, что ваша рабочая станция и устройство подключены к одной и той же беспроводной сети.

  • Убедитесь, что на вашем устройстве установлена ​​ОС Android 11 (API уровня 30) или выше для телефона или Android 13 (API уровня 33) или выше для телевизора и WearOS. Подробнее см. в разделе «Проверка и обновление версии Android» .

  • Если вы используете IDE, убедитесь, что у вас установлена ​​последняя версия Android Studio. Скачать её можно здесь .

  • На вашей рабочей станции обновите SDK Platform Tools до последней версии.

Для использования беспроводной отладки необходимо подключить устройство к рабочей станции с помощью QR-кода или кода сопряжения. Рабочая станция и устройство должны быть подключены к одной и той же беспроводной сети. Чтобы подключиться к устройству, выполните следующие действия:

  1. Включите параметры разработчика на вашем устройстве.

  2. Откройте Android Studio и в меню конфигураций запуска выберите пункт «Подключить устройства по Wi-Fi» .

    Выпадающее меню конфигураций запуска
    Рисунок 1. Меню конфигураций запуска.

    Появится окно «Сопряжение устройств по Wi-Fi» , как показано на рисунке 2.

    Скриншот всплывающего окна сопряжения устройств по Wi-Fi
    Рисунок 2. Всплывающее окно для сопряжения устройств с помощью QR-кода или кода сопряжения.
  3. На вашем устройстве нажмите «Беспроводная отладка» и подключите устройство:

    Скриншот телефона Pixel с настройкой «Системы беспроводной отладки».
    Рисунок 3. Скриншот настройки беспроводной отладки на телефоне Google Pixel.
    1. Чтобы связать устройство с QR-кодом, выберите «Связать устройство с QR-кодом» и отсканируйте QR-код, полученный во всплывающем окне «Связать устройства по Wi-Fi», показанном на рисунке 2.

    2. Чтобы подключить устройство с помощью кода сопряжения, выберите «Подключить устройство с помощью кода сопряжения» во всплывающем окне «Подключить устройства по Wi-Fi» . На устройстве выберите «Подключить с помощью кода сопряжения» и запишите предоставленный шестизначный код. Когда ваше устройство появится в окне «Подключить устройства по Wi-Fi» , выберите «Подключить» и введите шестизначный код, указанный на устройстве.

      Скриншот примера ввода пин-кода
      Рисунок 4. Пример ввода шестизначного кода.
  4. После сопряжения устройства вы можете попытаться развернуть приложение на нем.

    Чтобы подключить другое устройство или удалить текущее устройство на рабочей станции, перейдите в раздел «Беспроводная отладка» на вашем устройстве. Нажмите на имя вашей рабочей станции в разделе «Подключенные устройства» и выберите «Забыть» .

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

    Скриншот плитки разработчика быстрых настроек на телефоне Google Pixel.
    Рисунок 5. Параметр плитки разработчика быстрых настроек позволяет быстро включать и выключать беспроводную отладку.

Wi-Fi-подключение с помощью командной строки

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

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

  2. Включите беспроводную отладку на вашем устройстве, как описано ранее.

  3. На рабочей станции откройте окно терминала и перейдите к android_sdk/platform-tools .

  4. Найдите свой IP-адрес, номер порта и код сопряжения, выбрав «Связать устройство с кодом сопряжения» . Запишите IP-адрес, номер порта и код сопряжения, отображаемые на устройстве.

  5. На терминале рабочей станции выполните команду adb pair ipaddr:port . Используйте IP-адрес и номер порта, указанные выше.

  6. При появлении запроса введите код сопряжения, как показано ниже.

    Скриншот сопряжения в командной строке.
    Рисунок 6. Сообщение означает, что ваше устройство успешно сопряжено.

Устранение проблем с беспроводным подключением

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

Проверьте, соответствует ли ваша рабочая станция и устройство предварительным требованиям.

Убедитесь, что рабочая станция и устройство соответствуют предварительным требованиям, перечисленным в начале этого раздела .

Проверьте наличие других известных проблем

Ниже приведен список известных на данный момент проблем с беспроводной отладкой (с помощью adb или Android Studio) и способы их решения:

  • Wi-Fi не подключается : защищённые сети Wi-Fi, например, корпоративные, могут блокировать p2p-подключения и не позволять вам подключиться по Wi-Fi. Попробуйте подключиться через кабель или другую (не корпоративную) сеть Wi-Fi. Другой вариант — беспроводное подключение с помощью adb connect ip : port over tcp/ip (после первоначального подключения по USB), если есть возможность использовать некорпоративную сеть.

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

  • Устройство не подключается после успешного сопряжения : adb использует mDNS для обнаружения сопряженных устройств и автоматического подключения к ним. Если ваша сеть или конфигурация устройства не поддерживает mDNS или отключён, необходимо вручную подключиться к устройству, используя adb connect ip : port .

Подключитесь к устройству по беспроводной сети после первоначального подключения по USB (единственная возможность доступна на устройствах Android 10 и ниже)

Примечание: этот рабочий процесс применим также к Android 11 (и выше), однако следует помнить, что он также включает *первоначальное* подключение через физический USB.

Примечание: следующие инструкции не применимы к устройствам Wear под управлением Android 10 (уровень API 29) и ниже. Подробнее см. в руководстве по отладке приложений Wear OS .

Обычно adb взаимодействует с устройством по USB, но вы также можете использовать adb по Wi-Fi. Чтобы подключить устройство под управлением Android 10 (уровень API 29) или ниже, выполните следующие действия по USB:

  1. Подключите ваше Android-устройство и хост-компьютер adb к общей сети Wi-Fi.
  2. Примечание: Имейте в виду, что не все точки доступа подходят. Возможно, вам потребуется использовать точку доступа, брандмауэр которой настроен правильно для поддержки adb .

  3. Подключите устройство к хост-компьютеру с помощью USB-кабеля.
  4. Настройте целевое устройство на прослушивание TCP/IP-соединения на порту 5555:
    adb tcpip 5555
    
  5. Отсоедините USB-кабель от целевого устройства.
  6. Найдите IP-адрес устройства Android. Например, на устройстве Nexus IP-адрес можно найти в разделе «Настройки» > «О планшете» (или «О телефоне ») > «Состояние» > «IP-адрес» .
  7. Подключитесь к устройству по его IP-адресу:
    adb connect device_ip_address:5555
    
  8. Убедитесь, что ваш хост-компьютер подключен к целевому устройству:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

Теперь ваше устройство подключено к adb .

Если соединение adb с вашим устройством потеряно:

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

    Затем начните все сначала.

Запрос на устройства

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

  adb devices -l
  

В ответ adb выводит следующую информацию о состоянии для каждого устройства:

  • Серийный номер: adb создаёт строку для уникальной идентификации устройства по номеру порта. Пример серийного номера: emulator-5554
  • Состояние: Состояние подключения устройства может быть одним из следующих:
    • offline : Устройство не подключено к adb или не отвечает.
    • device : Устройство подключено к серверу adb . Обратите внимание, что это состояние не означает, что система Android полностью загружена и работоспособна, поскольку устройство подключается к adb во время загрузки системы. После загрузки это нормальное рабочее состояние устройства.
    • no device : Устройство не подключено.
  • Описание: Если вы укажете опцию -l , команда devices сообщит вам, какое устройство используется. Эта информация полезна, когда подключено несколько устройств, чтобы вы могли различать их.

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

$ 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 devices имеет особую последовательность команд, из-за которой запущенные эмуляторы не отображаются в выводе adb devices даже если они видны на рабочем столе. Это происходит, когда выполняются все следующие условия:

  • Сервер adb не запущен.
  • Используйте команду emulator с опцией -port или -ports с нечетным значением порта от 5554 до 5584.
  • Выбранный вами нечетный порт не занят, поэтому подключение к порту можно осуществить по указанному номеру порта — или, если он занят, эмулятор переключается на другой порт, который соответствует требованиям, изложенным в пункте 2.
  • Сервер adb запускается после запуска эмулятора.

Один из способов избежать этой ситуации — позволить эмулятору самостоятельно выбирать порты и запускать не более 16 эмуляторов одновременно. Другой способ — всегда запускать сервер adb перед использованием команды emulator , как описано в следующих примерах.

Пример 1: В следующей последовательности команд команда adb devices запускает сервер adb , но список устройств не отображается.

Остановите сервер adb и введите следующие команды в указанном порядке. В качестве имени AVD укажите допустимое имя AVD в вашей системе. Чтобы получить список имён AVD, введите emulator -list-avds . Команда emulator находится в каталоге android_sdk /tools .

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices

List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Пример 2: В следующей последовательности команд adb devices отображает список устройств, поскольку сервер adb был запущен первым.

Чтобы увидеть эмулятор в выводе adb devices , остановите сервер adb , а затем запустите его снова после использования команды emulator и перед использованием команды adb devices , как показано ниже:

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

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

Отправка команд на определенное устройство

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

  1. Используйте команду devices для получения серийного номера цели.
  2. Получив серийный номер, используйте опцию -s в командах adb , чтобы указать серийный номер.
    1. Если вы собираетесь выполнять много команд adb , вы можете задать переменную среды $ANDROID_SERIAL так, чтобы она содержала серийный номер.
    2. Если вы используете и -s , и $ANDROID_SERIAL , -s переопределяет $ANDROID_SERIAL .

В следующем примере получается список подключенных устройств, а затем серийный номер одного из устройств используется для установки helloWorld.apk на это устройство:

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

Примечание: Если вы введете команду без указания целевого устройства, когда доступно несколько устройств, adb выведет ошибку «adb: более одного устройства/эмулятора».

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

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

Вы можете использовать adb для установки APK на эмулятор или подключенное устройство с помощью команды install :

adb install path_to_apk

При установке тестового APK необходимо использовать опцию -t с командой install . Подробнее см. в описании -t .

Для установки нескольких APK-файлов используйте install-multiple . Это полезно, если вы загружаете все APK-файлы для конкретного устройства вашего приложения из Play Console и хотите установить их на эмуляторе или физическом устройстве.

Дополнительную информацию о создании APK-файла, который можно установить на экземпляр эмулятора/устройства, см. в разделе Сборка и запуск приложения .

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

Настроить переадресацию портов

Используйте команду forward для настройки произвольной переадресации портов, которая перенаправляет запросы с определенного порта хоста на другой порт устройства. В следующем примере настраивается переадресация порта хоста 6100 на порт устройства 7100:

adb forward tcp:6100 tcp:7100

В следующем примере настраивается переадресация порта хоста 6100 на local:logd:

adb forward tcp:6100 local:logd

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

Копирование файлов на устройство и с него

Используйте команды pull и push для копирования файлов на устройство и с него. В отличие от команды install , которая копирует APK-файл только в определённое место, команды pull и push позволяют копировать произвольные каталоги и файлы в любое место на устройстве.

Чтобы скопировать файл или каталог и его подкаталоги с устройства, выполните следующие действия:

adb pull remote local

Чтобы скопировать файл или каталог и его подкаталоги на устройство, выполните следующие действия:

adb push local remote

Замените local и remote на пути к целевым файлам/каталогам на компьютере разработчика (локальном) и на устройстве (удалённом). Например:

adb push myfile.txt /sdcard/myfile.txt

Остановите сервер adb

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

Чтобы остановить сервер adb , используйте команду adb kill-server . После этого вы можете перезапустить сервер, выполнив любую другую команду adb .

Выполнение команд adb

Выполняйте команды adb из командной строки на компьютере разработчика или из скрипта, используя следующее:

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

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

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

adb --help

Выполнение команд оболочки

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

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

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

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

Чтобы выйти из интерактивной оболочки, нажмите Control+D или введите exit .

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

adb shell ls /system/bin

Справка по большинству команд доступна через аргумент --help . Многие команды оболочки предоставляются toybox . Общая справка по всем командам toybox доступна через toybox --help .

В Android Platform Tools 23 и выше adb обрабатывает аргументы так же, как команда ssh(1) . Это изменение исправило множество проблем с внедрением команд и сделало возможным безопасное выполнение команд, содержащих метасимволы оболочки, например, adb install Let\'sGo.apk . Это изменение означает, что интерпретация любых команд, содержащих метасимволы оболочки, также изменилась.

Например, adb shell setprop key ' two words ' теперь вызывает ошибку, поскольку кавычки поглощаются локальной оболочкой, а устройство видит adb shell setprop key two words . Чтобы команда сработала, заключите её в кавычки дважды: один раз для локальной оболочки и один раз для удалённой, как это делается с ssh(1) . Например, adb shell setprop key "' two words '" работает, поскольку локальная оболочка использует внешний уровень кавычек, а устройство по-прежнему видит внутренний уровень кавычек: setprop key 'two words' . Экранирование также возможно, но обычно проще использовать двойные кавычки.

См. также инструмент командной строки Logcat , который полезен для мониторинга системного журнала.

Менеджер активности звонков

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

В оболочке синтаксис am выглядит следующим образом:

am command

Вы также можете выполнить команду диспетчера активности непосредственно из adb , не входя в удалённую оболочку. Например:

adb shell am start -a android.intent.action.VIEW

Таблица 1. Доступные команды менеджера активности

Команда Описание
start [ options ] intent Начать Activity , указанное intent .

Аргументы намерений см. в Спецификации .

Возможны следующие варианты:

  • -D : Включить отладку.
  • -W : Дождитесь завершения запуска.
  • --start-profiler file : Запустить профилировщик и отправить результаты в file .
  • -P file : аналогично --start-profiler , но профилирование останавливается, когда приложение переходит в режим ожидания.
  • -R count : Повторить запуск активности count раз. Перед каждым повтором самая активная активность будет завершена.
  • -S : Принудительная остановка целевого приложения перед началом действия.
  • --opengl-trace : Включить трассировку функций OpenGL.
  • --user user_id | current : Укажите, от имени какого пользователя следует выполнять запуск; если не указано, то запускать от имени текущего пользователя.
startservice [ options ] intent Запустить Service , указанную в intent .

Аргументы намерений см. в Спецификации .

Возможны следующие варианты:

  • --user user_id | current : Укажите, от имени какого пользователя следует выполнять запуск. Если не указано, то запуск от имени текущего пользователя.
force-stop package Принудительно остановить все, что связано с package .
kill [ options ] package Завершите все процессы, связанные с package . Эта команда завершает только те процессы, завершение которых безопасно и не повлияет на работу пользователя.

Возможны следующие варианты:

  • --user user_id | all | current : Укажите, какие процессы пользователя нужно завершить. Если не указано, завершаются все процессы пользователя.
kill-all Завершите все фоновые процессы.
broadcast [ options ] intent Выдать намерение на трансляцию.

Аргументы намерений см. в Спецификации .

Возможны следующие варианты:

  • [--user user_id | all | current] : Укажите, какому пользователю отправлять. Если не указано, то отправлять всем пользователям.
instrument [ options ] component Начните мониторинг с экземпляра Instrumentation . Обычно целевой component имеет вид test_package / runner_class .

Возможны следующие варианты:

  • -r : вывести необработанные результаты (в противном случае декодировать report_key_streamresult ). Используйте с [-e perf true] для генерации необработанных результатов для измерения производительности.
  • -e name value : установить name аргумента равным value . Для программ запуска тестов распространённая форма: -e testrunner_flag value [, value ...] .
  • -p file : Записать данные профилирования в file .
  • -w : Дождаться завершения инструментирования перед возвратом. Требуется для запуска тестов.
  • --no-window-animation : Отключить анимацию окон во время работы.
  • --user user_id | current : Указывает, от имени какого пользователя будет запущен инструментарий. Если не указано, запускается от имени текущего пользователя.
profile start process file Запустить профилировщик process , записать результаты в file .
profile stop process Остановить профилировщик на process .
dumpheap [ options ] process file Сбросить кучу process , записать в file .

Возможны следующие варианты:

  • --user [ user_id | current] : При указании имени процесса укажите пользователя процесса, данные которого нужно выгрузить. Если не указано, используется текущий пользователь.
  • -b [| png | jpg | webp] : выгрузить растровые изображения из графической памяти (уровень API 35 и выше). При желании укажите формат для выгрузки (по умолчанию PNG).
  • -n : Дамп собственной кучи вместо управляемой кучи.
dumpbitmaps [ options ] [-p process ] Вывод растровой информации из process (уровень API 36 и выше).

Возможны следующие варианты:

  • -d|--dump [ format ] : вывести содержимое растрового изображения в указанном format , который может быть png , jpg или webp . Если формат не указан, по умолчанию используется png . Будет создан ZIP-файл dumpbitmaps-<time>.zip с растровыми изображениями.
  • -p process : дамп битовых карт из process , можно указать несколько -p process .
Если process не указан, будут выведены битовые карты всех процессов.
set-debug-app [ options ] package Настройте package приложения на отладку.

Возможны следующие варианты:

  • -w : Ожидать отладчика при запуске приложения.
  • --persistent : Сохранить это значение.
clear-debug-app Очистите предыдущий набор пакетов для отладки с помощью set-debug-app .
monitor [ options ] Начните мониторинг сбоев или ошибок ANR.

Возможны следующие варианты:

  • --gdb : Запустить gdbserv на указанном порту при сбое/ANR.
screen-compat {on | off} package Режим совместимости экрана управления package .
display-size [reset | width x height ] Переопределить размер экрана устройства. Эта команда полезна для тестирования приложения на экранах разных размеров, имитируя маленькое разрешение экрана на устройстве с большим экраном, и наоборот.

Пример:
am display-size 1280x800

display-density dpi Переопределить плотность отображения устройства. Эта команда полезна для тестирования приложения на экранах с разной плотностью, имитируя среду экрана с высокой плотностью на экране с низкой плотностью, и наоборот.

Пример:
am display-density 480

to-uri intent Вывести заданную спецификацию намерения как URI.

Аргументы намерений см. в Спецификации .

to-intent-uri intent Вывести заданную спецификацию намерения как intent: URI.

Аргументы намерений см. в Спецификации .

Спецификация для аргументов намерения

Для команд диспетчера действий, которые принимают аргумент intent , вы можете указать намерение с помощью следующих параметров:

Позвонить менеджеру пакетов ( pm )

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

В оболочке синтаксис pm следующий:

pm command

Вы также можете выполнить команду менеджера пакетов непосредственно из adb , не входя в удалённую оболочку. Например:

adb shell pm uninstall com.example.MyApp

Таблица 2. Доступные команды менеджера пакетов

Команда Описание
list packages [ options ] filter Распечатать все пакеты, при необходимости только те, имя пакета которых содержит текст, заданный в filter .

Параметры:

  • -f : См. связанный файл.
  • -d : Фильтр для отображения только отключенных пакетов.
  • -e : Фильтр для отображения только включенных пакетов.
  • -s : Фильтр для отображения только системных пакетов.
  • -3 : Фильтр для отображения только сторонних пакетов.
  • -i : Смотрите установщик для пакетов.
  • -u : Включить неустановленные пакеты.
  • --user user_id : Пространство пользователя для запроса.
list permission-groups Распечатать все известные группы разрешений.
list permissions [ options ] group Распечатать все известные разрешения, при необходимости только в group .

Параметры:

  • -g : Организовать по группам.
  • -f : Вывести всю информацию.
  • -s : Краткое описание.
  • -d : Выводить только опасные разрешения.
  • -u : Вывести только те разрешения, которые будут видны пользователям.
list instrumentation [ options ] Перечислите все тестовые пакеты.

Параметры:

  • -f : Вывести список APK-файлов для тестового пакета.
  • target_package : список тестовых пакетов только для этого приложения.
list features Распечатать все возможности системы.
list libraries Распечатать все библиотеки, поддерживаемые текущим устройством.
list users Распечатать всех пользователей системы.
path package Вывести путь к APK указанного package .
install [ options ] path Установить пакет, указанный по path , в систему.

Параметры:

  • -r : Переустановить существующее приложение, сохранив его данные.
  • -t : разрешить установку тестовых APK-файлов. Gradle создаёт тестовый APK-файл, если вы только запустили или отладили приложение, либо использовали команду Android Studio Build > Build APK . Если APK-файл собран с использованием SDK для разработчиков, необходимо включить опцию -t в команду install для установки тестового APK-файла.
  • -i installer_package_name : Укажите имя пакета установщика.
  • --user user_id : Укажите пользователя, для которого нужно установить пакет. По умолчанию пакет устанавливается для всех пользователей на устройстве.
  • --install-location location : Задайте место установки, используя одно из следующих значений:
    • 0 : Использовать место установки по умолчанию.
    • 1 : Установить во внутреннюю память устройства.
    • 2 : Установка на внешний носитель.
  • -f : Установить пакет во внутреннюю системную память.
  • -d : Разрешить понижение версии кода.
  • -g : Предоставить все разрешения, перечисленные в манифесте приложения.
  • --fastdeploy : Быстро обновить установленный пакет, обновив только те части APK, которые изменились.
  • --incremental : устанавливает APK-файл в объёме, достаточном для запуска приложения, одновременно передавая оставшиеся данные в фоновом режиме. Для использования этой функции необходимо подписать APK, создать файл APK Signature Scheme v4 и поместить его в тот же каталог, что и APK. Эта функция поддерживается только на определённых устройствах. Этот параметр заставляет adb использовать функцию или завершать её сбоем, если она не поддерживается, с подробным описанием причины сбоя. Добавьте параметр --wait , чтобы дождаться полной установки APK, прежде чем предоставить доступ к APK.

    --no-incremental запрещает adb использовать эту функцию.

uninstall [ options ] package Удаляет пакет из системы.

Параметры:

  • -k : Сохранить каталоги данных и кэша после удаления пакета.
  • --user user_id : Указывает пользователя, для которого удаляется пакет. По умолчанию пакет удаляется для всех пользователей на устройстве.
  • --versionCode version_code : удаляет только если приложение имеет указанный код версии.
clear package Удалить все данные, связанные с пакетом.
enable package_or_component Включить указанный пакет или компонент (пишется как «пакет/класс»).
disable package_or_component Отключить указанный пакет или компонент (записывается как «пакет/класс»).
disable-user [ options ] package_or_component

Параметры:

  • --user user_id : Отключаемый пользователь.
grant package_name permission Предоставьте разрешение приложению. На устройствах под управлением Android 6.0 (уровень API 23) и выше это может быть любое разрешение, объявленное в манифесте приложения. На устройствах под управлением Android 5.1 (уровень API 22) и ниже это должно быть необязательное разрешение, определяемое приложением.
revoke package_name permission Отозвать разрешение для приложения. На устройствах под управлением Android 6.0 (уровень API 23) и выше разрешение может быть любым, объявленным в манифесте приложения. На устройствах под управлением Android 5.1 (уровень API 22) и ниже необходимо необязательное разрешение, определяемое приложением.
set-install-location location Измените место установки по умолчанию. Значения местоположения:
  • 0 : Авто: позвольте системе выбрать лучшее местоположение.
  • 1 : Внутренний: установка во внутреннюю память устройства.
  • 2 : Внешний: Установка на внешний носитель.

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

get-install-location Возвращает текущее место установки. Возвращаемые значения:
  • 0 [auto] : позволить системе выбрать лучшее местоположение
  • 1 [internal] : Установка на внутреннее хранилище устройства
  • 2 [external] : Установка на внешний носитель
set-permission-enforced permission [true | false] Укажите, следует ли применять данное разрешение.
trim-caches desired_free_space Обрезать файлы кэша для достижения указанного свободного пространства.
create-user user_name Создайте нового пользователя с заданным user_name и выведите на экран новый идентификатор пользователя.
remove-user user_id Удалить пользователя с указанным user_id , удалив все данные, связанные с этим пользователем.
get-max-users Выведите максимальное количество пользователей, поддерживаемых устройством.
get-app-links [ options ] [ package ]

Вывести состояние проверки домена для указанного package или для всех пакетов, если пакет не указан. Коды состояний определяются следующим образом:

  • none : для этого домена ничего не зарегистрировано
  • verified : домен успешно проверен
  • approved : принудительно одобрено, обычно через оболочку
  • denied : принудительно отклонено, обычно через оболочку
  • migrated : сохранена проверка из устаревшего ответа
  • restored : сохранена проверка из восстановления пользовательских данных
  • legacy_failure : отклонено устаревшим верификатором по неизвестной причине
  • system_configured : автоматически одобрено конфигурацией устройства
  • >= 1024 : пользовательский код ошибки, относящийся к верификатору устройства

Возможны следующие варианты:

  • --user user_id : включить выбор пользователей. Включить все домены, а не только те, которые прошли автоматическую проверку.
reset-app-links [ options ] [ package ]

Сбросить состояние проверки домена для указанного пакета или для всех пакетов, если ни один не указан.

  • package : пакет для сброса или «all» для сброса всех пакетов

Возможны следующие варианты:

  • --user user_id : включить выбор пользователей. Включить все домены, а не только те, которые прошли автоматическую проверку.
verify-app-links [ --re-verify ] [ package ]

Передать запрос на проверку для указанного package или для всех пакетов, если пакет не указан. Отправляет только в том случае, если пакет ранее не зарегистрировал ответ.

  • --re-verify : отправлять, даже если пакет записал ответ
set-app-links [--package package ] state domains

Вручную установите состояние домена для пакета. Для работы этого параметра домен должен быть объявлен пакетом как autoVerify. Эта команда не выдаст сообщение об ошибке для доменов, которые не удалось применить.

  • --package package : пакет для установки или «all» для установки всех пакетов
  • state : код, который нужно установить для доменов. Допустимые значения:
    • STATE_NO_RESPONSE (0) : сброс, как будто ответ не был зарегистрирован.
    • STATE_SUCCESS (1) : считать домен успешно проверенным агентом проверки домена. Обратите внимание, что агент проверки домена может переопределить это.
    • STATE_APPROVED (2) : считать домен всегда одобренным, не позволяя агенту проверки домена изменять его.
    • STATE_DENIED (3) : считать домен всегда отклоненным, не позволяя агенту проверки домена изменить его.
  • domains : список доменов, которые нужно изменить, разделенный пробелами, или «все», чтобы изменить каждый домен.
set-app-links-user-selection --user user_id [--package package ] enabled domains

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

  • --user user_id : пользователь, для которого нужно изменить выбор
  • --package package : пакет для установки
  • enabled : следует ли одобрять домен
  • domains : список доменов, которые нужно изменить, разделенный пробелами, или «все», чтобы изменить каждый домен
set-app-links-allowed --user user_id [--package package ] allowed

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

  • --user user_id : пользователь, для которого нужно изменить выбор
  • --package package : пакет для установки или «all» для установки всех пакетов; пакеты будут сброшены, если пакет не указан
  • allowed : true, чтобы разрешить пакету открывать автоматически проверенные ссылки, false, чтобы отключить
get-app-link-owners --user user_id [--package package ] domains

Вывести владельцев определенного домена для заданного пользователя в порядке от низшего к высшему приоритету.

  • --user user_id : пользователь для запроса
  • --package package : опционально также печатать для всех веб-доменов, объявленных пакетом, или «all» для печати всех пакетов
  • domains : список доменов, разделенных пробелами, для запроса

Вызов диспетчера политик устройств ( dpm )

Чтобы упростить разработку и тестирование приложений для управления устройствами, отправляйте команды инструменту управления политиками устройств ( dpm ). Используйте этот инструмент для управления активным приложением администратора или изменения данных о состоянии политики на устройстве.

В оболочке синтаксис dpm следующий:

dpm command

Вы также можете ввести команду диспетчера политик устройств непосредственно из adb , не входя в удаленную оболочку:

adb shell dpm command

Таблица 3. Доступные команды диспетчера политик устройств

Команда Описание
set-active-admin [ options ] component Устанавливает component в качестве активного администратора.

Возможны следующие варианты:

  • --user user_id : Укажите целевого пользователя. Вы также можете передать --user current для выбора текущего пользователя.
set-profile-owner [ options ] component Установить component как активного администратора, а его пакет как владельца профиля для существующего пользователя.

Возможны следующие варианты:

  • --user user_id : укажите целевого пользователя. Вы также можете передать --user current , чтобы выбрать текущего пользователя.
  • --name name : укажите удобочитаемое название организации.
set-device-owner [ options ] component Установите component в качестве активного администратора, а его пакет в качестве владельца устройства.

Возможны следующие варианты:

  • --user user_id : укажите целевого пользователя. Вы также можете передать --user current , чтобы выбрать текущего пользователя.
  • --name name : укажите удобочитаемое название организации.
remove-active-admin [ options ] component Отключить активного администратора. Приложение должно объявить android:testOnly в манифесте. Эта команда также удаляет владельцев устройств и профилей.

Возможны следующие варианты:

  • --user user_id : укажите целевого пользователя. Вы также можете передать --user current , чтобы выбрать текущего пользователя.
clear-freeze-period-record Очистите запись устройства о ранее установленных периодах приостановки для системных обновлений OTA. Это полезно, чтобы избежать ограничений планирования устройства при разработке приложений, которые управляют периодами зависания. См. Управление обновлениями системы .

Поддерживается на устройствах под управлением Android 9.0 (уровень API 28) и выше.

force-network-logs Заставьте систему подготовить все существующие сетевые журналы к получению ЦОД. Если доступны журналы подключения или DNS, ЦОД получает обратный вызов onNetworkLogsAvailable() . См. Журнал сетевой активности .

Эта команда ограничена по скорости. Поддерживается на устройствах под управлением Android 9.0 (уровень API 28) и выше.

force-security-logs Заставьте систему сделать все существующие журналы безопасности доступными для ЦОД. Если доступны журналы, ЦОД получает обратный вызов onSecurityLogsAvailable() . См. Журнал активности корпоративных устройств .

Эта команда ограничена по скорости. Поддерживается на устройствах под управлением Android 9.0 (уровень API 28) и выше.

Сделать снимок экрана

Команда screencap — это утилита оболочки для создания снимка экрана устройства.

В оболочке синтаксис screencap следующий:

screencap filename

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

adb shell screencap /sdcard/screen.png

Вот пример сеанса создания снимков экрана с использованием оболочки adb для создания снимка экрана и команды pull для загрузки файла с устройства:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

Альтернативно, если вы опустите имя файла, screencap запишет изображение в стандартный вывод. В сочетании с опцией -p для указания формата PNG вы можете передать снимок экрана устройства непосредственно в файл на локальном компьютере.

Вот пример создания снимка экрана и его локального сохранения с помощью одной команды:

# use 'exec-out' instead of 'shell' to get raw data
$ adb exec-out screencap -p > screen.png

Запишите видео

Команда screenrecord — это утилита оболочки для записи дисплея устройств под управлением Android 4.4 (уровень API 19) и выше. Утилита записывает действия на экране в файл MPEG-4. Вы можете использовать этот файл для создания рекламных или обучающих видеороликов, а также для отладки и тестирования.

В оболочке используйте следующий синтаксис:

screenrecord [options] filename

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

adb shell screenrecord /sdcard/demo.mp4

Остановите запись экрана, нажав Control+C. В противном случае запись автоматически останавливается через три минуты или по истечении времени, установленного --time-limit .

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

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

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

Ограничения утилиты screenrecord :

  • Звук не записывается вместе с видеофайлом.
  • Запись видео недоступна для устройств под управлением Wear OS.
  • Некоторые устройства могут не поддерживать запись с исходным разрешением экрана. Если у вас возникли проблемы с записью экрана, попробуйте использовать более низкое разрешение экрана.
  • Поворот экрана во время записи не поддерживается. Если экран поворачивается во время записи, часть экрана при записи обрезается.

Таблица 4. Параметры screenrecord

Параметры Описание
--help Отобразить синтаксис и параметры команды
--size width x height Установите размер видео: 1280x720 . Значением по умолчанию является собственное разрешение экрана устройства (если оно поддерживается), в противном случае — 1280x720. Для достижения наилучших результатов используйте размер, поддерживаемый кодером Advanced Video Coding (AVC) вашего устройства.
--bit-rate rate Установите битрейт видео в мегабитах в секунду. Значение по умолчанию — 20 Мбит/с. Вы можете увеличить скорость передачи данных, чтобы улучшить качество видео, но это приведет к увеличению размера файлов фильмов. В следующем примере устанавливается скорость записи 6 Мбит/с:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Установите максимальное время записи в секундах. Значение по умолчанию и максимальное значение — 180 (3 минуты).
--rotate Поверните выход на 90 градусов. Эта функция является экспериментальной.
--verbose Отображение информации журнала на экране командной строки. Если вы не установите эту опцию, утилита не будет отображать никакой информации во время работы.

Чтение профилей ART для приложений

Начиная с Android 7.0 (уровень API 24), среда выполнения Android (ART) собирает профили выполнения установленных приложений, которые используются для оптимизации производительности приложений. Изучите собранные профили, чтобы понять, какие методы выполняются часто и какие классы используются во время запуска приложения.

Примечание. Получить имя файла профиля выполнения можно только в том случае, если у вас есть root-доступ к файловой системе, например, в эмуляторе.

Чтобы создать текстовую форму информации профиля, используйте следующую команду:

adb shell cmd package dump-profiles package

Чтобы получить созданный файл, используйте:

adb pull /data/misc/profman/package.prof.txt

Сброс тестовых устройств

Если вы тестируете свое приложение на нескольких тестовых устройствах, может оказаться полезным выполнять сброс настроек вашего устройства между тестами, например, чтобы удалить пользовательские данные и сбросить тестовую среду. Вы можете выполнить сброс настроек тестового устройства под управлением Android 10 (уровень API 29) или выше с помощью команды оболочки adb testharness , как показано:

adb shell cmd testharness enable

При восстановлении устройства с помощью testharness устройство автоматически создает резервную копию ключа RSA, который позволяет выполнять отладку на текущей рабочей станции в постоянном месте. То есть после перезагрузки устройства рабочая станция может продолжать отладку и выдавать adb -команды устройству без ручной регистрации нового ключа.

Кроме того, чтобы упростить и повысить безопасность тестирования вашего приложения, использование testharness для восстановления устройства также изменяет следующие настройки устройства:

  • В устройстве настраиваются определенные системные параметры, чтобы не появлялись мастера первоначальной настройки устройства. То есть устройство переходит в состояние, из которого вы можете быстро установить, отладить и протестировать свое приложение.
  • Настройки:
    • Отключает экран блокировки.
    • Отключает экстренные оповещения.
    • Отключает автоматическую синхронизацию учетных записей.
    • Отключает автоматическое обновление системы.
  • Другой:
    • Отключает предустановленные приложения безопасности.

Если вашему приложению необходимо обнаружить и адаптироваться к настройкам по умолчанию команды testharness , используйте ActivityManager.isRunningInUserTestHarness() .

SQLite

sqlite3 запускает программу командной строки sqlite для проверки баз данных SQLite. Он включает в себя такие команды, как .dump для печати содержимого таблицы и .schema для печати инструкции SQL CREATE для существующей таблицы. Вы также можете выполнять команды SQLite из командной строки, как показано:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

Примечание. Доступ к базе данных SQLite возможен только при наличии root-доступа к файловой системе, например, в эмуляторе.

Дополнительную информацию см. в документации по командной строке sqlite3 .

adb USB-бэкэнды

Сервер adb может взаимодействовать со стеком USB через два бэкэнда. Он может использовать либо собственный серверный компонент ОС (Windows, Linux или macOS), либо серверную часть libusb . Некоторые функции, такие как attach , detach и определение скорости USB, доступны только при использовании серверной части libusb .

Вы можете выбрать серверную часть, используя переменную среды ADB_LIBUSB . Если он не установлен, adb использует свой бэкэнд по умолчанию. Поведение по умолчанию варьируется в зависимости от ОС. Начиная с ADB v34 , бэкэнд liubusb используется по умолчанию во всех ОС, кроме Windows, где по умолчанию используется собственный бэкэнд. Если установлен ADB_LIBUSB , он определяет, будет ли использоваться собственный бэкенд или libusb . Дополнительную информацию о переменных среды adb см. на странице руководства adb.

бэкэнды adb mDNS

ADB может использовать протокол многоадресной рассылки DNS для автоматического подключения сервера и устройств. Сервер ADB поставляется с двумя серверными модулями: Bonjour (mdnsResponder от Apple) и Openscreen.

Серверной части Bonjour необходим демон, работающий на хост-компьютере. В macOS встроенный демон Apple всегда работает, но в Windows и Linux пользователь должен убедиться, что демон mdnsd запущен и работает. Если команда adb mdns check возвращает ошибку, вполне вероятно, что ADB использует серверную часть Bonjour, но демон Bonjour не запущен.

Серверной части Openscreen не требуется запуск демона на компьютере. Поддержка серверной части Openscreen в macOS начинается с ADB v35. Windows и Linux поддерживаются начиная с ADB v34.

По умолчанию ADB использует серверную часть Bonjour. Это поведение можно изменить с помощью переменной среды ADB_MDNS_OPENSCREEN (установленной в 1 или 0 ). Дополнительную информацию см. на странице руководства АБР .

adb Burst Mode (начиная с ADB 36.0.0)

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

Режим пакетной съёмки по умолчанию отключён. Чтобы включить эту функцию, выполните одно из следующих действий:

  • Установите для переменной среды ADB_DELAYED_ACK значение 1 .
  • В Android Studio перейдите в настройки отладчика в меню Файл (или Android Studio в macOS) > Настройки > Сборка, выполнение, развертывание > Отладчик и установите для параметра ADB Server Burst Mode значение Включено .