Android Debug Bridge (ADB) — это набор инструментов, включённых в пакет Android SDK. Это не только мощный инструмент для разработчиков и тестировщиков Android, но и хорошая игрушка для поклонников Android.
Этот репозиторий постоянно обновляется. Приветствуются запросы на включение изменений и сообщения об ошибках. Если вы считаете, что этот ресурс полезен, вы можете поставить ему «звёздочку» и при необходимости легко вернуться сюда.
Примечание: некоторые команды могут зависеть от версии системы Android или ПЗУ.
Другие языки: китайский (README.md).
Базовый синтаксис команды adb выглядит следующим образом:
adb [-d|-e|-s <serialNumber>] <команда>
Если у вас подключено только одно устройство/эмулятор, вы можете опустить часть [-d | -e | -s <serialNumber>]
и использовать непосредственно adb <command>
.
Если подключено более одного устройства/эмулятора, вам необходимо указать целевое устройство для команды.
Параметр | Значение |
---|---|
-d | Указывает текущее единственное USB-соединение с Android-устройством в качестве цели команды |
-e | Указывает текущий единственный симулятор в качестве цели выполнения команды |
-s <SerialNumber> |
Указывает номер устройства, соответствующий serialNumber/симулятору, в качестве цели команды |
В случае подключения нескольких устройств/симуляторов чаще используется параметр -s <serialNumber>
. Получить serialNumber можно с помощью команды adb devices
. Например:
$ adb devices
List of devices attached
cf264b8f device
emulator-5554 device
Вывод cf264b8f
и emulator-5554
— это serialNumber. Например, на этот раз я хочу указать оборудование cf264b8f
, чтобы выполнить команду adb для получения разрешения экрана:
adb -s cf264b8f shell wm size
При использовании нескольких устройств/симуляторов для указания целевого устройства для команды описание будет упрощено и не будет повторяться.
Команда запуска сервера adb:
adb start-server
(Обычно нет необходимости выполнять эту команду вручную, при выполнении команды adb сервер adb запускается автоматически.) Остановка сервера adb:
adb kill-server
Просмотр версии adb:
Команда:
adb version
Пример вывода:
Android Debug Bridge version 1.0.36
Revision 8f855a3d9b35-android
Запуск adbd от имени суперпользователя:
Принцип работы заключается в том, что сервер adb и клиент adb на стороне телефона и ПК устанавливают соединение, после чего клиент adb через сервер adb пересылает команды для выполнения.
Если для выполнения некоторых команд adbd требуются права суперпользователя, то нельзя напрямую использовать команду adb xxx
. В этом случае можно выполнить команду adb shell
, а затем su
, но это также позволяет adbd выполнять команды с правами суперпользователя.
Команда:
adb root
Нормальный вывод:
restarting adbd as root
Теперь запустите adb shell
и посмотрите, не превратилась ли строка приглашения в `#?
После того как некоторые модели телефонов не позволяют adbd выполнить команды с привилегиями суперпользователя с помощью команды adb root
, например, Samsung, появится сообщение «adbd не может работать с правами root в производственных сборках», тогда вы можете установить adbd Insecure и попробовать adb root
.
Соответственно, если вы хотите восстановить права adbd без прав суперпользователя, вы можете использовать команду adb unroot
.
Назначение порта сервера adb:
Команда:
adb -P <port> start-server
По умолчанию порт равен 5037.
Команда:
adb devices
Пример вывода:
List of devices attached
cf264b8f device
emulator-5554 device
Формат вывода: [serialNumber] [state]
, где serialNumber — это SN, а state — одна из следующих категорий:
Offline
— указывает, что устройство не подключено к успеху или не отвечает.Device
— устройство подключено. Обратите внимание, что это состояние не определяет, была ли система Android полностью активирована и работает ли устройство во время запуска экземпляра устройства, к которому можно подключиться до adb, но после загрузки системы, прежде чем она станет работоспособной.No device
— нет подключения устройства / эмулятора.Вывод показывает текущее подключение двух устройств / симуляторов, cf264b8f
и emulator-5554
— их SN. Как видно из названия emulator-5554
, это эмулятор Android.
Общие аварийные сигналы:
List of devices attached
List of devices attached
cf264b8f offline
Для нормального использования adb при подключении через USB необходимо убедиться, что:
adb devices
Если вы видите
xxxxxx device
Описание Подключение успешно.
Android 11 и выше поддерживают развёртывание и отладку вашего приложения удалённо с рабочей станции с использованием Android Debug Bridge (adb). Например, вы можете развернуть своё отлаживаемое приложение на нескольких удалённых Беспроводное подключение (без физического подключения устройства через USB)
Это позволяет избежать проблем с подключением через USB, таких как установка драйверов.
Чтобы использовать беспроводную отладку, необходимо выполнить сопряжение устройства с рабочей станцией с помощью кода сопряжения. Рабочая станция и устройство должны быть подключены к одной беспроводной сети. Чтобы подключиться к устройству, выполните следующие действия:
Обновите до последней версии SDK Platform-Tools.
Подключите Android-устройство к компьютеру с запущенным adb, подключённому к той же локальной сети, например, к тому же Wi-Fi.
Включите опцию «Wireless debugging».
В диалоговом окне с вопросом «Разрешить беспроводную отладку в этой сети?» нажмите «Разрешить».
Выберите «Сопряжение устройства с кодом сопряжения». Запишите код сопряжения, IP-адрес и номер порта, отображаемые на устройстве.
На рабочей станции откройте терминал и перейдите в android_sdk/platform-tools.
Выполните команду adb pair ipaddr:port
. Используйте IP-адрес и порт из шага 5.
При появлении запроса введите полученный в шаге 5 код сопряжения. Появится сообщение о том, что ваше устройство успешно сопряжено.
none
Enter pairing code: xxxxxx
Successfully paired to ...
adb connect ipaddr:port
. Используйте IP-адрес и порт в разделе «Wireless debugging».Беспроводное соединение (необходимо использовать кабель USB)
Помимо подключения через USB к компьютеру для использования adb также можно использовать беспроводное соединение — хотя процесс подключения также требует использования USB, но после успешного подключения к вашему устройству можно избавиться от ограничений кабеля USB в пределах определённого диапазона!
Шаги:
Подключите Android-устройство для запуска adb к компьютеру, подключённому к той же локальной сети, например, к одному и тому же Wi-Fi.
Устройство подключено к компьютеру через кабель USB.
Убедитесь, что подключение прошло успешно (вы можете запустить adb devices
, чтобы проверить, отображается ли устройство в списке).
adb tcpip 5555
Отсоедините USB-соединение.
Найдите IP-адрес устройства.
Обычно его можно найти в «Настройках» — «О телефоне» — «Информация о состоянии» — «IP-адрес», также можно использовать следующую команду adb в методе Lane команды [Просмотр информации об устройстве — IP-адрес][1].
adb connect <device-ip-address>
Здесь <device-ip-address>
— это IP-адрес устройства, найденный на предыдущем шаге.
adb devices
Если вы видите
<device-ip-address>:5555 device
Описание Подключение успешно.
Если не удаётся подключиться, убедитесь, что Android-устройства и компьютер подключены к одному Wi-Fi, затем снова выполните команду adb connect <device-ip-address>
;
если это не сработает, перезапустите adb с помощью команды adb kill-server
и попробуйте снова.
Беспроводное подключение
команда:
adb disconnect <device-ip-address>
Беспроводное подключение (без использования кабеля USB)
Примечание: вам нужны права root.
В методе «беспроводное подключение (необходимо использовать USB-кабель)», описанном в официальных документах, для включения беспроводного подключения требуется помощь USB-кабеля.
Поскольку мы хотим добиться беспроводного соединения, можем ли мы сделать всё это по беспроводной связи? Ответ — да.
Оборудование уже установлено, этот шаг можно пропустить. Я использую адрес загрузки эмулятора терминала: Эмулятор терминала для Android.
Запустите Android-устройство и компьютер adb, подключённый к одной и той же локальной сети, например, к одному и тому же Wi-Fi.
Откройте эмулятор терминала на вашем Android-устройстве и выполните последовательность команд:
su
setprop service.adb.tcp.port 5555
Обычно он находится в «Настройках» — «Об устройстве» — «Информация о состоянии». Не удалось установить приложение:
Ошибка | Описание |
---|---|
INSTALL_FAILED_REPLACE_COULDNT_DELETE | Невозможно удалить при замене |
INSTALL_FAILED_DEXOPT | Ошибка валидации оптимизации dex или нехватка места |
INSTALL_FAILED_OLDER_SDK | Версия системы устройства ниже требований приложения |
INSTALL_FAILED_CONFLICTING_PROVIDER | В приложении уже существует объект с таким же именем в контент-провайдере |
INSTALL_FAILED_NEWER_SDK | Версия системы оборудования выше требований приложения |
INSTALL_FAILED_TEST_ONLY | Только для тестовых приложений, но когда вы устанавливаете, параметр -t не указан |
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE | Содержит несовместимый двоичный интерфейс приложения процессора устройства для нативного кода |
INSTALL_FAILED_MISSING_FEATURE | Приложение использует функции устройства, которые недоступны |
INSTALL_FAILED_CONTAINER_ERROR | Ошибка доступа к SDCard |
INSTALL_FAILED_INVALID_INSTALL_LOCATION | Не может быть установлен в указанное местоположение |
INSTALL_FAILED_MEDIA_UNAVAILABLE | Место установки недоступно |
INSTALL_FAILED_VERIFICATION_TIMEOUT | Тайм-аут установки, проверка |
INSTALL_FAILED_VERIFICATION_FAILURE | Сбой проверки установочного пакета |
------------------------------------------------------------------------------------ | |
INSTALL_FAILED_PACKAGE_CHANGED | вызывающая прикладная программа ожидает несогласованности |
INSTALL_FAILED_UID_CHANGED | ранее установленное приложение, и это назначение UID несогласовано |
INSTALL_FAILED_VERSION_DOWNGRADE | уже установлено приложение позже |
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE | установлена целевая поддержка среды выполнения SDK для разрешений приложения с тем же именем, для установки версия среды выполнения не поддерживает разрешение |
INSTALL_PARSE_FAILED_NOT_APK | указанный путь не является файлом или не заканчивается на .apk
|
INSTALL_PARSE_FAILED_BAD_MANIFEST | неразрешенный файл AndroidManifest.xml |
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION | синтаксический анализатор встречает исключение |
INSTALL_PARSE_FAILED_NO_CERTIFICATES | установочный пакет не подписан |
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES | уже установлено приложение, и подписанные APK-файлы несовместимы |
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING | встречается при анализе файла APK CertificateEncodingException
|
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME | в файле манифеста нет или неверно указано имя пакета |
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID | в файле манифеста указан неверный общий идентификатор пользователя |
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED | встречается при разборе ошибки структуры файла манифеста |
INSTALL_PARSE_FAILED_MANIFEST_EMPTY | в файле манифеста не удалось найти рабочую метку (инструментарий или приложение) |
INSTALL_FAILED_INTERNAL_ERROR | установка завершается неудачно из-за системных проблем |
INSTALL_FAILED_USER_RESTRICTED | Пользователи ограничены в установке приложений. |
INSTALL_FAILED_DUPLICATE_PERMISSION | приложение пытается определить существующее имя разрешения |
INSTALL_FAILED_NO_MATCHING_ABIS | приложения включают двоичный интерфейс приложения устройства, который не поддерживает собственный код |
INSTALL_CANCELED_BY_USER | приложения, установленные на устройстве, требуют подтверждения, но не управляют устройством или точкой отмены |
INSTALL_FAILED_ACWF_INCOMPATIBLE | Приложения несовместимы с устройством |
INSTALL_FAILED_TEST_ONLY | APK-файл собран через Android Studio «RUN» |
INSTALL_FAILED_ABORTED: User rejected permissions | Приложения, установленные на устройстве, содержат предупреждения о рисках, требуют подтверждения, но управление устройством не осуществляется или отменено |
Не содержит AndroidManifest.xml | Недействительный файл APK |
Является недействительным ZIP-файлом | Недействительный файл APK |
Оффлайн | Устройство не подключено успешно |
Несанкционированный доступ | Несанкционированное устройство позволяет выполнять отладку |
Ошибка: устройство не найдено | Неудачное подключение оборудования |
-------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
Ошибка протокола | Устройство отключено |
Первое устройство с успешным подключением через ADB | |
Неизвестная опция: -s | Android 2.2 не поддерживает следующую установку на SD-карту |
Не используйте параметры -s
|
|
На устройстве не осталось свободного места | Недостаток пространства |
Очистить пространство | |
Отказано в доступе… SD-карта… | SD-карта недоступна |
Подписи не совпадают с ранее установленной версией; игнорируется! | Уже установлено это приложение, но подписи не совпадают |
Удалить предыдущую установку, затем установить эту |
Введение в принцип работы команды Adb install
Команда Adb install фактически состоит из трёх шагов:
Отправляет файлы APK в /data/local/tmp.
Вызывает установку через pm install.
Удаляет соответствующий файл APK из /data/local/tmp.
Поэтому при необходимости можно вручную выполнить процесс установки, следуя этим шагам.
команда:
adb uninstall [-k] <packagename>
<Packagename>
представляет имя пакета приложения, необязательный параметр -k
указывает на удаление приложения, но сохранение каталогов данных и кэша.
Пример команды:
adb uninstall com.qihoo360.mobilesafe
Удаление представляет собой 360 мобильных стражей.
Список всех включённых приложений:
adb shell pm list packages -e
команда:
adb shell pm disable-user <packagename>
Пример команды:
adb shell pm disable-user com.qihoo360.mobilesafe
команда:
adb shell pm enable <packagename>
Пример команды:
adb shell pm enable com.qihoo360.mobilesafe
команда:
adb shell pm clear <packagename>
<Packagename>
представляет название пакета приложения. Эффект этой команды эквивалентен информации о приложении на экране настроек, где нажаты кнопки «Очистить кэш» и «Очистить данные».
Пример команды:
adb shell pm clear com.qihoo360.mobilesafe
Очистка данных и кэша 360 мобильных стражей.
команда:
adb shell dumpsys activity activities | grep mResumedActivity
Пример вывода:
mResumedActivity: ActivityRecord{8079d7e u0 com.cyanogenmod.trebuchet/com.android.launcher3.Launcher t42}
Где com.cyanogenmod.trebuchet / com.android.launcher3.Launcher
— текущая активность на переднем плане.
Приведённая выше команда может быть недействительной в Windows. Можно попробовать использовать adb shell dumpsys activity activities | findstr mResumedActivity
или adb shell "dumpsys activity activities | grep mResumedActivity"
.
команда:
adb shell dumpsys activity services [<packagename>]
``` **Параметр `<packagename>` является необязательным.** Команда с параметром `<packagename>` выведет список служб, связанных с этим именем пакета, а команда без параметра `<packagename>` — все службы.
Полное имя пакета указывать не обязательно. Например, `adb shell dumpsys activity services org.mazhuang` выведет службы, связанные с `org.mazhuang.demo1`, `org.mazhuang.demo2` и `org.mazhuang123` и т. д.
### Запрос подробной информации о пакете
Команда:
```sh
adb shell dumpsys package <packagename>
В выводе содержится много информации, включая таблицу распознавателей активности, зарегистрированных поставщиков контента, имя пакета, идентификатор пользователя, путь к файлам/ресурсам/кодам после установки, название и код версии, информация о разрешениях и их предоставленный статус, версия подписи и др.
<packagename>
– это имя пакета приложения.
Пример вывода:
Таблица распознавателей активности:
Действия без данных:
android.intent.action.MAIN:
5b4cba8 org.mazhuang.guanggoo/.SplashActivity filter 5ec9dcc
Действие: «android.intent.action.MAIN»
Категория: «android.intent.category.LAUNCHER»
AutoVerify=false
Зарегистрированные поставщики контента:
org.mazhuang.guanggoo/com.tencent.bugly.beta.utils.BuglyFileProvider:
Provider{7a3c394 org.mazhuang.guanggoo/com.tencent.bugly.beta.utils.BuglyFileProvider}
Поставщики контента:
[org.mazhuang.guanggoo.fileProvider]:
Provider{7a3c394 org.mazhuang.guanggoo/com.tencent.bugly.beta.utils.BuglyFileProvider}
applicationInfo=ApplicationInfo{7754242 org.mazhuang.guanggoo}
Менеджер наборов ключей:
[org.mazhuang.guanggoo]
Наборы ключей подписи: 501
Пакеты:
Пакет [org.mazhuang.guanggoo] (c1d7f):
Идентификатор пользователя = 10394
pkg = Package{55f714c org.mazhuang.guanggoo}
Путь кода = /data/app/org.mazhuang.guanggoo-2
Путь ресурса = /data/app/org.mazhuang.guanggoo-2
LegacyNativeLibraryDir = /data/app/org.mazhuang.guanggoo-2/lib
Основной Abi процессора = null
Вторичный Abi процессора = null
Код версии = 74 minSdk = 15 targetSdk = 25
Название версии = 1.1.74
Сплиты = [base]
Версия подписи apk = 2
Информация о приложении = ApplicationInfo{7754242 org.mazhuang.guanggoo}
Флаги = [HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP]
Частные флаги = [RESIZEABLE_ACTIVITIES]
Каталог данных = /data/user/0/org.mazhuang.guanggoo
Поддержка экранов = [small, medium, large, xlarge, resizeable, anyDensity]
Отметка времени = 2017-10-22 23:50:53
Время первой установки = 2017-10-22 23:50:25
Последнее обновление = 2017-10-22 23:50:55
Имя пакета установщика = com.miui.packageinstaller
Подписи = PackageSignatures{af09595 [53c7caa2]}
Разрешения на установку фиксированы = true статус установки = 1
Флаги pkg = [HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP]
Запрошенные разрешения:
android.permission.READ_PHONE_STATE
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_LOGS
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
Разрешения установки:
android.permission.INTERNET: предоставлено = true
android.permission.ACCESS_NETWORK_STATE: предоставлено = true
android.permission.ACCESS_WIFI_STATE: предоставлено = true
Пользователь 0: ceDataInode = 1155675 установлен = true скрыт = false приостановлен = false остановлен = true не запущен = false включен = 0
gids = [3003]
Разрешения во время выполнения:
android.permission.READ_EXTERNAL_STORAGE: предоставлено = true
android.permission.READ_PHONE_STATE: предоставлено = true
android.permission.WRITE_EXTERNAL_STORAGE: предоставлено = true
Пользователь 999: ceDataInode = 0 установлен = false скрыт = false приостановлен = false остановлен = true не запущен = true включен = 0
gids = [3003]
Разрешения во время выполнения:
Состояние Dexopt:
[org.mazhuang.guanggoo]
Набор инструкций: arm64
Путь: /data/app/org.mazhuang.guanggoo-2/base.apk
Статус: /data/app/org.mazhuang.guanggoo-2/oat/arm64/base.odex [compilation_filter=speed-profile, статус=kOatUpToDate]
Команда:
adb shell pm path <PACKAGE>
Вывод показывает путь установки приложения.
Пример вывода:
adb shell pm путь
``` ## Взаимодействие с приложениями
Наиболее часто используемый синтаксис для взаимодействия с приложениями:
```sh
am <команда>
Общие команды для <команда>
:
Команда | Использование |
---|---|
start [параметры] <INTENT> |
Запуск активности, указанной в <INTENT>
|
startservice [параметры] <INTINT> |
Запуск сервиса, указанного в <INTINT>
|
broadcast [параметры] <INTENT> |
Отправка широковещательного сообщения <INTENT>
|
force-stop <имя_пакета> |
Принудительная остановка всего, что связано с <имя_пакета>
|
<INTENT>
— гибкий параметр, соответствующий Intent в приложении.
Параметры для <INTENT>
:
Параметр | Значение |
---|---|
-a <ACTION> |
Указание действия намерения, например, android.intent.action.VIEW . Можно указать только один раз. |
-c <CATEGORY> |
Указание категории намерения, например, android.intent.category.APP_CONTACTS
|
-n <COMPONENT> |
Указание имени компонента с префиксом имени пакета для создания явного намерения, например, com.example.app/.ExampleActivity
|
Есть несколько параметров для добавления данных в <INTENT>
, аналогичных extra
для Bundle:
Параметр | Значение |
---|---|
--esn <EXTRA_KEY> |
null значение (только имя ключа) |
`-e | --es <EXTRA_KEY> <EXTRA_STRING_VALUE>` |
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> |
логическое значение |
--ei <EXTRA_KEY> <EXTRA_INT_VALUE> |
целочисленное значение |
--el <EXTRA_KEY> <EXTRA_LONG_VALUE> |
длинное значение |
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> |
значение с плавающей точкой |
--eu <EXTRA_KEY> <EXTRA_URI_VALUE> |
URI |
--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE> |
имя компонента |
--eia <EXTRA_KEY> <EXTRA_INT_VALUE> [, <EXTRA_INT_VALUE ...] |
массив целых чисел |
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE> [, <EXTRA_LONG_VALUE ...] |
массив длинных значений |
запуск с именем активности
Синтаксис:
adb shell am start [параметры] <INTENT>
Например:
adb shell am start -n com.tencent.mm/.ui.LauncherUI
Команда выше означает запуск стартовой активности WeChat.
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
Команда выше означает запуск MainActivity приложения с именем пакета org.mazhuang.boottimemeasure
с дополнительной строковой информацией (ключ — «toast», значение — «hello, world»).
запуск без имени активности
Синтаксис:
adb shell monkey -p <имя_пакета> -c android.intent.category.LAUNCHER 1
Например:
adb shell monkey -p com.tencent.mm -c android.intent.category.LAUNCHER 1
Команда выше означает запуск стартовой активности WeChat.
Синтаксис:
adb shell am **Запуск сервиса**
startservice [options] <INTENT>
Например:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
Эта команда означает запуск сервиса из WeChat.
Ещё один типичный пример использования: если на устройстве есть нижние виртуальные клавиши, но они не отображаются, можно попробовать следующее:
adb shell am startservice -n com.android.systemui/.SystemUIService
Остановка сервиса
Синтаксис:
adb shell am stopservice [options] <INTENT>
Отправка широковещательного сообщения
Синтаксис:
adb shell am broadcast [options] <INTENT>
Широковещательное сообщение может быть отправлено всем компонентам или указанному компоненту.
Например, команда отправки широковещательного сообщения с BOOT_COMPLETED
всем компонентам выглядит следующим образом:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Другой пример отправки широковещательного сообщения с BOOT_COMPLETED
только org.mazhuang.boottimemeasure / .BootCompletedReceiver
:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
Команда отправки широковещательного сообщения очень полезна в тестах, особенно когда широковещательное сообщение трудно сгенерировать обычным способом, будет полезно отправить широковещательное сообщение командой.
Можно отправлять как системные предопределённые, так и пользовательские широковещательные сообщения. Ниже приведены некоторые системные предопределённые широковещательные намерения и триггеры:
Действие | Триггер |
---|---|
android.net.conn.CONNECTIVITY_CHANGE | изменения подключения к сети |
android.intent.action.SCREEN_ON | включение экрана |
android.intent.action.SCREEN_OFF | выключение экрана |
android.intent.action.BATTERY_LOW | низкий заряд батареи, соответствующий системному диалогу «Низкий заряд» |
android.intent.action.BATTERY_OKAY | батарея в порядке после того, как была разряжена |
android.intent.action.BOOT_COMPLETED | завершение загрузки устройства |
android.intent.action.DEVICE_STORAGE_LOW | состояние нехватки памяти на устройстве |
android.intent.action.DEVICE_STORAGE_OK | состояние нехватки памяти на устройстве больше не существует |
android.intent.action.PACKAGE_ADDED | установлено новое приложение |
android.net.wifi.STATE_CHANGE | изменение статуса Wi-Fi |
android.net.wifi.WIFI_STATE_CHANGED | Wi-Fi включён, отключён, включается, отключается или неизвестно |
android.intent.action.BATTERY_CHANGED | изменение уровня заряда батареи |
android.intent.action.INPUT_METHOD_CHANGED | изменение системного метода ввода |
android.intent.action.ACTION_POWER_CONNECTED | подключение внешнего питания к устройству |
android.intent.action.ACTION_POWER_DISCONNECTED | отключение внешнего питания от устройства |
android.intent.action.DREAMING_STARTED | система переходит в спящий режим |
android.intent.action.DREAMING_STOPPED | система выходит из спящего режима |
android.intent.action.WALLPAPER_CHANGED | смена обоев |
android.intent.action.HEADSET_PLUG | проводная гарнитура подключена или отключена |
--- | ----------------------------------------------------------- |
26 | Кнопка включения питания |
27 | съёмка (в приложении камеры) |
64 | Открыть браузер |
82 | кнопка меню |
85 | воспроизведение / пауза |
86 | остановить воспроизведение |
87 | воспроизвести следующее |
88 | воспроизведено на |
122 | Переместить курсор в начало или верх списка |
123 | Переместить курсор в конец строки или вниз списка |
126 | возобновить воспроизведение |
127 | приостановить воспроизведение |
164 | отключить звук |
176 | открыть настройки системы |
187 | переключение приложений |
207 | открыть контакты |
208 | открыть календарь |
209 | открыть музыку |
210 | открыть калькулятор |
220 | уменьшить яркость экрана |
221 | увеличить яркость экрана |
223 | перевести систему в спящий режим |
224 | включить экран |
231 | открыть голосовой помощник |
276 | если нет wakelock, разрешить системе перейти в спящий режим |
Вот несколько примеров использования команды input
.
Команда:
adb shell input keyevent 26
Эквивалентно нажатию кнопки включения.
Команда:
adb shell input keyevent 82
Команда:
adb shell input keyevent 3
Команда:
adb shell input keyevent 4
Увеличить громкость:
adb shell input keyevent 24
Уменьшить громкость:
adb shell input keyevent 25
Отключить звук:
adb shell input keyevent 164
Воспроизведение / Пауза:
adb shell input keyevent 85
Остановить воспроизведение:
adb shell input keyevent 86
Воспроизвести следующую песню:
adb shell input keyevent 87
Воспроизведено на одном устройстве:
adb shell input keyevent 88
Возобновить воспроизведение:
adb shell input keyevent 126
Приостановить воспроизведение:
adb shell input keyevent 127
Можно включить и выключить, нажав кнопку выключения над аналоговой кнопкой включения, но если вы хотите включить или выключить экран, то можно использовать следующий метод.
Включить экран:
adb shell input keyevent 224
Выключить экран:
adb shell input keyevent 223
Если экран блокировки паролем не разблокируется с помощью жестов скольжения, можно использовать команду input swipe
, чтобы разблокировать его.
Команда (параметры модели Nexus 5, например, проведите пальцем вверх, чтобы разблокировать):
adb shell input swipe 300 1000 300 500
Параметры 3001000300
представляют начальную координату x начальной точки, координату y конечной точки, координату x конечной точки и координату y конечной точки.
Когда фокус находится в текстовом поле, вы можете ввести текст с помощью команды input
.
Команда:
adb shell input text hello
Слово «hello» теперь появится в текстовом поле.
Если вы хотите ввести китайский язык, вы можете установить ADBKeyBoard.apk, подробную документацию см. здесь.
Затем выполните команды:
# 1. Установите текущий метод ввода на ADBKeyBoard
adb shell ime set com.android.adbkeyboard/.AdbIME
# 2. Введите китайский
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好'
Журнал Android Система разделена на две части: базовое ядро Linux выводит журнал в /proc/kmsg, а Android — в /dev/log.
Формат:
[adb] logcat [<option>] ... [<filter-spec>] ...
Общие способы использования перечислены ниже:
Журнал Android делится на следующие уровни:
Будет выведен журнал с уровнем, указанным или выше.
Например, команда:
adb logcat *:W
выведет журналы Warning, Error, Fatal и Silent.
(Обратите внимание: тег *
должен быть заключён в двойные кавычки, например, adb logcat "*:W"
, иначе будет выдана ошибка no matches found *:W
.)
Фильтры представляют собой серию <tag>[:priority]
.
Например, команда:
adb logcat ActivityManager:I MyApp:D *:S
означает вывод журнала с тегом ActivityManager
выше уровня журналов Info, вывод журнала Debug выше уровня тега MyApp
и вывод других тегов на уровне Silent (то есть скрывает логирование других тегов).
Можно использовать опцию adb logcat -v <format>
, чтобы указать формат вывода журнала.
Поддерживаются следующие форматы <format>
:
<priority>/<tag>(<pid>): <message>
Пример:
D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
<priority>(<pid>) <message>
Пример:
D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
<priority>/<tag>: <message>
Пример:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
<message>
Пример:
Disconnected process message: 10, size: 0
<datetime> <priority>/<tag>(<pid>): <message>
Пример:
08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
<datetime> <pid> <tid> <priority> <tag>: <message>
Пример:
08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
[ <datetime> <pid>:<tid> <priority>/<tag> ]
<message>
Пример:
[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]
Disconnected process message: 10, size: 0
Указанный формат можно использовать одновременно с вышеуказанным фильтром. Например:
adb logcat -v long ActivityManager:I *:S
adb logcat -c
Команда:
adb shell dmesg
Пример вывода:
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
<4>[14201.755954] Restarting tasks ... done.
<6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
<6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
<6>[14201.872498] PM: Syncing filesystems ... done.
В скобках [14201.684016]
время представляет момент начала работы ядра в секундах.
С помощью журнала ядра можно делать некоторые вещи, такие как измерение времени загрузки ядра. Freeing init memory
— это время перед строкой после запуска системы, в журнале ядра.
Команда:
adb shell getprop ro.product.model
Образец вывода:
Nexus 5
Команда:
adb shell dumpsys battery
Образец вывода:
Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
status: 2
health: 2
present: true
level: 44
scale: 100
voltage: 3872
temperature: 280
technology: Li-poly
Scale
означает максимальное значение level
, а level
означает текущий уровень заряда батареи. Вывод | Имя сетевого подключения | Статус подключения | IP-адрес | MAC-адрес |
| --- | --- | --- | ---|
| 10.129.160.99/20 | UP | | f8:a9:d0:17:42:4d |
| lo | UP | 127.0.0.1/8 | 00:00:00:00:00:00 |
| p2p0 | UP | 0.0.0.0/0 | fa:a9:d0:17:42:4d |
| sit0 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet0 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet1 | DOWN | 0.0.0.0/0 | 0000:00:00:00:00:00 |
| rmnet3 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet2 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet4 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet6 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet5 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rmnet7 | DOWN | 0.0.0.0/0 | 00:00:00:00:00:00 |
| rev_rmnet3 | DOWN | 0.0.0.0/0 | 4e:b7:e4:2e:17:58 |
| rev_rmnet2 | DOWN | 0.0.0.0/0 | 4e:f0:c8:bf:7a:cf |
| rev_rmnet4 | DOWN | 0.0.0.0/0 | a6:c0:3b:6b:c4:1f |
| rev_rmnet6 | DOWN | 0.0.0.0/0 | 66:bb:5d:64:2e:e9 |
| rev_rmnet5 | DOWN | 0.0.0.0/0 | 0e:1b:eb:b9:23:a0 |
| rev_rmnet7 | DOWN | 0.0.0.0/0 | 7a:d9:f6:81:40:5a |
| rev_rmnet8 | DOWN | 0.0.0.0/0 | 4e:e2:a9:bb:d0:1b |
| rev_rmnet0 | DOWN | 0.0.0.0/0 | fe:65:d0:ca:82:a9 |
| rev_rmnet1 | DOWN | 0.0.0.0/0 | da:d8:e8:4f:2e:fe |
Информация о MAC-адресе
Команда:
adb shell cat /sys/class/net/wlan0/address
Пример вывода:
f8:a9:d0:17:42:4d
Приведённый выше вывод является MAC-адресом LAN. Если вам нужна другая информация о подключении, то команда adb shell netcfg
, упомянутая в разделе «IP-адрес», будет полезна.
Сведения о процессоре
Команда:
adb shell cat /proc/cpuinfo
Пример вывода:
Processor : ARMv7 Processor rev 0 (v7l)
processor : 0
BogoMIPS : 38.40
processor : 1
BogoMIPS : 38.40
processor : 2
BogoMIPS : 38.40
processor : 3
BogoMIPS : 38.40
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0x2
CPU part : 0x06f
CPU revision : 0
Hardware : Qualcomm MSM 8974 HAMMERHEAD (Flattened Device Tree)
Revision : 000b
Serial : 0000000000000000
Это информация о процессоре Nexus 5. Из вывода можно узнать, что аппаратное обеспечение — это Qualcomm MSM 8974, а номер процессора от 0 до 3, что означает, что процессор четырёхъядерный. Затем из раздела «Процессор» можно найти, что архитектура процессора — ARMv7 Processor rev 0 ( v71).
Сведения о памяти
Команда:
adb shell cat /proc/meminfo
Пример вывода:
MemTotal: 1027424 kB
MemFree: 486564 kB
Buffers: 15224 kB
Cached: 72464 kB
SwapCached: 24152 kB
Active: 110572 kB
Inactive: 259060 kB
Active(anon): 79176 kB
Inactive(anon): 207736 kB
Active(file): 31396 kB
Inactive(file): 51324 kB
Unevictable: 3948 kB
Mlocked: 0 kB
HighTotal: 409600 kB
HighFree: 132612 kB
LowTotal: 617824 kB
LowFree: 353952 kB
SwapTotal: 262140 kB
SwapFree: 207572 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 265324 kB
Mapped: 47072 kB
Shmem: 1020 kB
Slab: 57372 kB
SReclaimable: 7692 kB
SUnreclaim: 49680 kB
KernelStack: 4512 kB
PageTables: 5912 kB
``` **SDK API, но сохраните предупреждение в logcat. Вы можете продолжать использовать API в строгом режиме.**
| 2 | Запрещено вызывать интерфейсы в тёмно-сером и чёрном списках. |
|---|---|
| 3 | Запрещено вызывать интерфейс из чёрного списка, но разрешено вызывать интерфейс из тёмно-серого списка. |
### Показать/скрыть строку состояния или панель навигации
Настройки в этом разделе соответствуют «Расширенному рабочему столу» в Cyanogenmod.
Команда:
```sh
adb shell settings put global policy_control <key-values>
<key-values>
состоит из ключей и их значений, формат: <key1>=<value1>:<key2>=<value2>
.
Ключ | Значение |
---|---|
immersive.full | Скрыть оба |
immersive.status | Скрыть строку статуса |
immersive.navigation | Скрыть панель навигации |
immersive.preconfirms | ? |
Значения для этих ключей представляют собой список токенов через запятую, где токены:
Значение | Значение |
---|---|
apps | Все приложения |
* | Везде |
packagename | Включить пакет |
-packagename | Исключить пакет |
Например:
adb shell settings put global policy_control immersive.full=*
Означает установить скрытие строки статуса и панели навигации везде.
adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
Означает скрыть строку статуса в приложениях с именем пакета com.package1
или com.package2
, скрыть панель навигации во всех приложениях, кроме тех, у кого имя пакета — com.package3
.
Сделайте снимок экрана и сохраните на компьютер:
adb exec-out screencap -p > sc.png
Если ваша версия adb старая и не имеет команды exec-out
, то вы можете сделать снимок экрана следующим образом:
Сначала сделайте снимок экрана и сохраните его на устройстве:
adb shell screencap -p /sdcard/sc.png
Затем экспортируйте файл png на свой компьютер:
adb pull /sdcard/sc.png
Вы можете использовать команду adb shell screencap --help
, чтобы увидеть справку по команде screencap
, здесь приведены два важных параметра и их значения:
Параметр | Значение |
---|---|
-p | Сохранить файл в формате png, указанном |
-d Display-id | скриншоты отображают указанный номер (случай нескольких экранов дисплея рядом) |
Найдено: если вы укажете имя файла, его можно опустить при использовании параметра -p для .png
в конце; в противном случае вам нужно будет использовать параметр -p. Если вы не укажете имя файла, содержимое снимка экрана будет напрямую выведено в стандартный вывод.
Ещё один способ сохранить файл скриншота на компьютере с помощью одной команды:
adb shell screencap -p | sed "s/\r$//" > sc.png
Это зависит от команды sed
, которая доступна в Linux и Mac OS X по умолчанию. В Windows вы можете найти её в каталоге bin в месте установки Git. В противном случае вам может потребоваться загрузить sed для Windows и добавить каталог, в котором находится sed.exe, к переменной среды PATH.
Запись экрана сохраняется в формате mp4 на / sdcard:
adb shell screenrecord /sdcard/filename.mp4
Когда вам нужно остановить запись, нажмите Ctrl-C </ kbd>, время записи по умолчанию и максимальное время записи составляет 180 секунд.
Если вам нужно экспортировать на свой компьютер:
adb pull /sdcard/filename.mp4
Вы можете использовать adb shell screenrecord --help
, чтобы просмотреть справку по команде screenrecord, следующие параметры являются общими и их значениями:
| Параметр | Значение | Перемонтировать системный раздел как доступный для записи
Примечание: вам нужны права суперпользователя.
Системные разделы монтируются только для чтения, но некоторым операционным системам, таким как Android, чтобы добавить команды и не иметь необходимости в собственных приложениях / системных операциях записи, необходимо перемонтировать их для чтения-записи.
Шаги:
adb shell
su
mount
Пример вывода:
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /var tmpfs rw,seclabel,relatime,mode=770,gid=1000 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
none /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
none /dev/memcg cgroup rw,relatime,memory 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
none /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
none /sys/fs/cgroup/freezer cgroup rw,relatime,freezer 0 0
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,relatime,noauto_da_alloc,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/persist /persist ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/modem /firmware vfat ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1000,fmask=0337,dmask=0227,codepage=cp437,iocharset=iso8859-1,shortname=lower,errors=remount-ro 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/fuse /mnt/shell/emulated/0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
Найдите интересующую нас строку с / system
:
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
Здесь / dev / block / platform / msm_sdcc.1 / by-name / system
— это путь к файлу, который мы получили из вывода на предыдущем шаге.
Если вывод не содержит ошибок, то операция прошла успешно, вы можете использовать / system по своему усмотрению.
Проверить подключение через WiFi пароль
Примечание: Вам нужны права суперпользователя.
Команда:
adb shell
su
cat /data/misc/wifi/*.conf
Пример вывода:
network={
ssid="TP-LINK_9DFC"
scan_ssid=1
psk="123456789"
key_mgmt=WPA-PSK
group=CCMP TKIP
auth_alg=OPEN
sim_num=1
priority=13893
}
network={
ssid="TP-LINK_F11E"
psk="987654321"
key_mgmt=WPA-PSK
sim_num=1
priority=17293
}
В настройках WLAN мы увидим ssid
, psk
— пароль, key_mgmt
— шифрование безопасности. Из конфигурационного файла данные должны быть в файле WifiConfigStore.xml.
adb shell
su
cat /data/misc/wifi/WifiConfigStore.xml
Пример вывода:
Из-за слишком большого количества элементов в файле можно сосредоточиться на
ConfigKey
— имени WiFi иPreSharedKey
— пароле WiFi.
<string name="ConfigKey">"Wi-Fi"WPA_PSK</string>
<string name="PreSharedKey">"931907334"</string>
Чтобы установить системную дату и время
Примечание: вам нужны права суперпользователя.
Команда:
adb shell
su
date -s 20160823.131500
Она должна изменить системную дату и время на 13:15:00 23 августа 2016 года.
Перезагрузите мобильный телефон
Команда:
adb reboot
Определите, является ли устройство корневым
Команда:
adb shell
su
В этом случае командная строка будет выглядеть так: $ указывает на отсутствие прав суперпользователя, # указывает на наличие прав суперпользователя.
Используйте Monkey для стресс-тестирования
Monkey может генерировать псевдослучайные события для имитации пользовательских кликов, касаний, жестов и других операций. Вы можете запрограммировать случайный стресс-тест разрабатываемого приложения.
Использование простое:
adb shell monkey -p <packagename> -v 500
Здесь <packagename>
— конкретное приложение, которому нужно отправить 500 псевдослучайных событий.
Подробнее о Monkey см. официальный документ.
Включите и отключите WiFi
Примечание: вам нужны права суперпользователя.
Иногда необходимо контролировать режим WiFi устройства. Для этого можно использовать следующие команды.
Включить WiFi:
adb root
adb shell svc wifi enable
Отключить WiFi:
adb root
adb shell svc wifi disable
Если команда выполнена успешно, вывод будет пустым. Если у вас нет прав суперпользователя для выполнения этой команды, вы получите сообщение об ошибке Killed
.
Перезагрузка в режиме восстановления
Команда:
adb reboot recovery
Перезагрузка из режима восстановления Android
Команда:
adb reboot
Перезагрузка в режим Fastboot
Команда:
adb reboot bootloader
Обновление системы через sideload
Если вы скачали пакет обновления системы Android, соответствующий вашему устройству, вы также можете выполнить обновление с помощью adb.
Случай в режиме обновления Recovery:
Перезагрузите устройство в режим Recovery.
Команда:
adb reboot recovery
В интерфейсе устройства перейдите в раздел «Применить обновление» — «Применить из ADB».
Примечание: меню восстановления могут отличаться, но в некоторых версиях есть пункт меню «Применить обновление из ADB».
Загрузите и обновите систему с помощью команды:
adb sideload <путь к файлу обновления.zip>
Включение и отключение SELinux
Включить SELinux:
adb root
adb shell setenforce 1
Отключить SELinux:
adb root
adb shell setenforce 0
Включение и отключение dm_verity
Включить dm_verity:
adb root
adb enable-verity
Отключить dm_verity:
adb root
adb disable-verity
Система Android основана на ядре Linux, поэтому многие команды Linux также доступны в оболочке adb. Часть из них уже использовалась в этом документе.
Просмотр процессов
Команда:
adb shell ps
Пример вывода:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 8904 788 ffffffff 00000000 S /init
root 2 0 0 0 ffffffff 00000000 S kthreadd
...
u0_a71 7779 5926 1538748 48896 ffffffff 00000000 S com.sohu.inputmethod.sogou:classic
u0_a58 7963 5926 1561916 59568 ffffffff 00000000 S org.mazhuang.boottimemeasure
...
shell 8750 217 10640 740 00000000 b6f28340 R ps
Значение каждого столбца:
Список | Значение |
---|---|
USER | их пользователь |
PID | Идентификатор процесса |
PPID | Идентификатор родительского процесса |
NAME | Имя процесса |
Просмотрите потребление ресурсов в реальном времени
Команда:
adb shell top
Пример вывода:
User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307
PID PR CPU% S #THR VSS RSS PCY
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )