Мост отладки 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 OS под управлением 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. Меню настроек запуска.

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

    Скриншот всплывающего окна, отображающего оба устройства по 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, такие как корпоративные сети 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 OS под управлением 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 host:
    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 Вывести заданное описание намерения в виде URI intent: .

См. Спецификацию для ознакомления с аргументами, касающимися намерений .

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

Для команд диспетчера действий, принимающих аргумент intent , вы можете указать 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 v4 и поместить этот файл в ту же директорию, что и APK-файл. Эта функция поддерживается только на определенных устройствах. Этот параметр заставляет adb использовать эту функцию или завершить работу с ошибкой, если она не поддерживается, с подробным объяснением причины ошибки. Добавьте параметр --wait , чтобы дождаться полной установки APK-файла, прежде чем предоставлять к нему доступ.

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

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

Параметры:

  • -k : Сохранить каталоги данных и кэша после удаления пакета.
  • --user user_id : Указывает пользователя, для которого удаляется пакет. По умолчанию пакет удаляется для всех пользователей на устройстве.
  • --versionCode version_code : Удаляет приложение только в том случае, если оно имеет указанный код версии.
clear package Удалите все данные, связанные с пакетом.
enable package_or_component Включите указанный пакет или компонент (обозначается как "package/class").
disable package_or_component Отключить указанный пакет или компонент (обозначается как "package/class").
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 ]

Reset domain verification state for the given package, or for all packages if none is specified.

  • package : the package to reset, or "all" to reset all packages

Options are:

  • --user user_id : include user selections. Include all domains, not just autoVerify ones.
verify-app-links [ --re-verify ] [ package ]

Broadcast a verification request for the given package , or for all packages if none is specified. Only sends if the package has previously not recorded a response.

  • --re-verify : send even if the package has recorded a response
set-app-links [--package package ] state domains

Manually set the state of a domain for a package. The domain must be declared by the package as autoVerify for this to work. This command will not report a failure for domains that could not be applied.

  • --package package : the package to set, or "all" to set all packages
  • state : the code to set the domains to. Valid values are:
    • STATE_NO_RESPONSE (0) : reset as if no response was ever recorded.
    • STATE_SUCCESS (1) : treat domain as successfully verified by domain verification agent. Note that the domain verification agent can override this.
    • STATE_APPROVED (2) : treat domain as always approved, preventing the domain verification agent from changing it.
    • STATE_DENIED (3) : treat domain as always denied, preventing the domain verification agent from changing it.
  • domains : space-separated list of domains to change, or "all" to change every domain.
set-app-links-user-selection --user user_id [--package package ] enabled domains

Manually set the state of a host user selection for a package. The domain must be declared by the package for this to work. This command will not report a failure for domains that could not be applied.

  • --user user_id : the user to change selections for
  • --package package : the package to set
  • enabled : whether to approve the domain
  • domains : space-separated list of domains to change, or "all" to change every domain
set-app-links-allowed --user user_id [--package package ] allowed

Toggle the auto-verified link-handling setting for a package.

  • --user user_id : the user to change selections for
  • --package package : the package to set, or "all" to set all packages; packages will be reset if no package is specified
  • allowed : true to allow the package to open auto-verified links, false to disable
get-app-link-owners --user user_id [--package package ] domains

Print the owners for a specific domain for a given user in low- to high-priority order.

  • --user user_id : the user to query for
  • --package package : optionally also print for all web domains declared by a package, or "all" to print all packages
  • domains : space-separated list of domains to query for

Call device policy manager ( dpm )

To help you develop and test your device management apps, issue commands to the device policy manager ( dpm ) tool. Use the tool to control the active admin app or change a policy's status data on the device.

While in a shell, the dpm syntax is:

dpm command

You can also issue a device policy manager command directly from adb without entering a remote shell:

adb shell dpm command

Table 3. Available device policy manager commands

Командование Описание
set-active-admin [ options ] component Sets component as active admin.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
set-profile-owner [ options ] component Set component as active admin and its package as profile owner for an existing user.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
  • --name name : Specify the human-readable organization name.
set-device-owner [ options ] component Set component as active admin and its package as device owner.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
  • --name name : Specify the human-readable organization name.
remove-active-admin [ options ] component Disable an active admin. The app must declare android:testOnly in the manifest. This command also removes device and profile owners.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
clear-freeze-period-record Clear the device's record of previously set freeze periods for system OTA updates. This is useful to avoid the device scheduling restrictions when developing apps that manage freeze periods. See Manage system updates .

Supported on devices running Android 9.0 (API level 28) and higher.

force-network-logs Force the system to make any existing network logs ready for retrieval by a DPC. If there are connection or DNS logs available, the DPC receives the onNetworkLogsAvailable() callback. See Network activity logging .

This command is rate-limited. Supported on devices running Android 9.0 (API level 28) and higher.

force-security-logs Force the system to make any existing security logs available to the DPC. If there are logs available, the DPC receives the onSecurityLogsAvailable() callback. See Log enterprise device activity .

This command is rate-limited. Supported on devices running Android 9.0 (API level 28) and higher.

Сделайте скриншот

The screencap command is a shell utility for taking a screenshot of a device display.

While in a shell, the screencap syntax is:

screencap filename

To use screencap from the command line, enter the following:

adb shell screencap /sdcard/screen.png

Here's an example screenshot session, using the adb shell to capture the screenshot and the pull command to download the file from the device:

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

Alternatively, if you omit the filename, screencap writes the image to standard output. When combined with the -p option to specify PNG format, you can stream the device screenshot directly to a file on your local machine.

Here's an example of capturing a screenshot and saving it locally in a single command:

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

Записать видео

The screenrecord command is a shell utility for recording the display of devices running Android 4.4 (API level 19) and higher. The utility records screen activity to an MPEG-4 file. You can use this file to create promotional or training videos or for debugging and testing.

In a shell, use the following syntax:

screenrecord [options] filename

To use screenrecord from the command line, enter the following:

adb shell screenrecord /sdcard/demo.mp4

Stop the screen recording by pressing Control+C. Otherwise, the recording stops automatically at three minutes or the time limit set by --time-limit .

To begin recording your device screen, run the screenrecord command to record the video. Then, run the pull command to download the video from the device to the host computer. Here's an example recording session:

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

The screenrecord utility can record at any supported resolution and bit rate you request, while retaining the aspect ratio of the device display. The utility records at the native display resolution and orientation by default, with a maximum length of three minutes.

Limitations of the screenrecord utility:

  • Audio is not recorded with the video file.
  • Video recording is not available for devices running Wear OS.
  • Some devices might not be able to record at their native display resolution. If you encounter problems with screen recording, try using a lower screen resolution.
  • Rotation of the screen during recording is not supported. If the screen does rotate during recording, some of the screen is cut off in the recording.

Table 4. screenrecord options

Параметры Описание
--help Display command syntax and options
--size width x height Set the video size: 1280x720 . The default value is the device's native display resolution (if supported), 1280x720 if not. For best results, use a size supported by your device's Advanced Video Coding (AVC) encoder.
--bit-rate rate Set the video bit rate for the video, in megabits per second. The default value is 20Mbps. You can increase the bit rate to improve video quality, but doing so results in larger movie files. The following example sets the recording bit rate to 6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Set the maximum recording time, in seconds. The default and maximum value is 180 (3 minutes).
--rotate Rotate the output 90 degrees. This feature is experimental.
--verbose Display log information on the command-line screen. If you do not set this option, the utility does not display any information while running.

Read ART profiles for apps

Starting in Android 7.0 (API level 24), the Android Runtime (ART) collects execution profiles for installed apps, which are used to optimize app performance. Examine the collected profiles to understand which methods are executed frequently and which classes are used during app startup.

Note: It is only possible to retrieve the execution profile filename if you have root access to the file system, for example, on an emulator.

To produce a text form of the profile information, use the following command:

adb shell cmd package dump-profiles package

To retrieve the file produced, use:

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

Reset test devices

If you test your app across multiple test devices, it may be useful to reset your device between tests, for example, to remove user data and reset the test environment. You can perform a factory reset of a test device running Android 10 (API level 29) or higher using the testharness adb shell command, as shown:

adb shell cmd testharness enable

When restoring the device using testharness , the device automatically backs up the RSA key that allows debugging through the current workstation in a persistent location. That is, after the device is reset, the workstation can continue to debug and issue adb commands to the device without manually registering a new key.

Additionally, to help make it easier and more secure to keep testing your app, using the testharness to restore a device also changes the following device settings:

  • The device sets up certain system settings so that initial device setup wizards do not appear. That is, the device enters a state from which you can quickly install, debug, and test your app.
  • Настройки:
    • Disables lock screen.
    • Disables emergency alerts.
    • Disables auto-sync for accounts.
    • Disables automatic system updates.
  • Другой:
    • Disables preinstalled security apps.

If your app needs to detect and adapt to the default settings of the testharness command, use the ActivityManager.isRunningInUserTestHarness() .

sqlite

sqlite3 starts the sqlite command-line program for examining SQLite databases. It includes commands such as .dump to print the contents of a table and .schema to print the SQL CREATE statement for an existing table. You can also execute SQLite commands from the command line, as shown:

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

Note: It is only possible to access a SQLite database if you have root access to the file system, for example, on an emulator.

For more information, see the sqlite3 command line documentation .

adb USB backends

The adb server can interact with the USB stack through two backends. It can either use the native backend of the OS (Windows, Linux, or macOS) or it can use the libusb backend. Some features, such as attach , detach , and USB speed detection, are only available when using libusb backend.

You can choose a backend by using the ADB_LIBUSB environment variable. If it isn't set, adb uses its default backend. The default behavior varies among OS. Starting with ADB v34 , the liubusb backend is used by default on all OS except Windows, where the native backend is used by default. If ADB_LIBUSB is set, it determines whether the native backend or libusb is used. See the adb manual page for more information about adb environment variables.

adb mDNS backends

ADB can use the multicast DNS protocol to automatically connect the server and devices. The ADB server ships with two backends, Bonjour (Apple's mdnsResponder) and Openscreen.

The Bonjour backend needs a daemon to be running on the host machine. On macOS Apple's built-in daemon is always running, but on Windows and Linux, the user must make sure the mdnsd daemon is up and running. If the command adb mdns check returns an error, it is likely that ADB is using the Bonjour backend but there is no Bonjour daemon running.

The Openscreen backend does not need a daemon to be running on the machine. Support for the Openscreen backend on macOS starts at ADB v35. Windows and Linux are supported as of ADB v34.

By default ADB uses the Bonjour backend. This behavior can be changed using the environment variable ADB_MDNS_OPENSCREEN (set to 1 or 0 ). See the ADB manual page for further details.

adb Burst Mode (starting with ADB 36.0.0)

Burst Mode is an experimental feature that lets ADB to keep on sending packets to a device even before the device has responded to the previous packet. This greatly increases the throughput of ADB when transferring large files and also reduces latency while debugging.

Burst Mode is disabled by default. To enable the feature, do one of the following:

  • Set the environment variable ADB_BURST_MODE to 1 .
  • In Android Studio, go to the debugger settings at File (or Android Studio on macOS) > Settings > Build, Execution, Deployment > Debugger and set ADB Server Burst Mode to Enabled .