Вспомогательный класс для обработки запросов и подключений к adb.
В настоящее время используется неблокирующий ввод-вывод с ожиданием в цикле (spin-wait). Селектор был бы более эффективным, но кажется излишним для наших целей.
Вложенные классы |
|---|
class | AdbHelper.AdbResponse Ответ от Азиатского банка развития. |
Общедоступные методы |
|---|
static void | createForward (InetSocketAddress adbSockAddr, IDevice device, String localPortSpec, String remotePortSpec) Создает переадресацию портов между локальным и удаленным портами. |
static AdbCommandRejectedException | createHiddenException (String message, boolean errorDuringDeviceSelection) |
static AdbCommandRejectedException | createHiddenException (String message) |
static byte[] | createJdwpForwardRequest (int pid) Создает запрос на переадресацию портов для процесса JDWP. |
static SocketChannel | createPassThroughConnection (InetSocketAddress adbSockAddr, String deviceSerialNumber, int pid) Создает и устанавливает новый сквозной сокет, соединяющий хост с портом устройства. |
static void | createReverse (InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec, String localPortSpec) Создает механизм обратного переключения портов между удаленным и локальным портами. |
static void | executeRemoteCommand (InetSocketAddress adbSockAddr, AdbHelper.AdbService adbService, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits, InputStream is) Выполняет удаленную команду на устройстве и получает результат. |
static void | executeRemoteCommand (InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits) Выполняет команду оболочки на устройстве и получает результат. |
static void | executeRemoteCommand (InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeToOutputResponse, TimeUnit maxTimeUnits) Выполняет команду оболочки на устройстве и получает результат. |
static byte[] | formAdbRequest (String payloadString) Создайте ASCII-строку, перед которой будут расположены четыре шестнадцатеричные цифры. |
static String | getFeatures ( IDevice device) Запрашивает у устройства набор поддерживаемых функций. |
static RawImage | getFrameBuffer (InetSocketAddress adbSockAddr, IDevice device, long timeout, TimeUnit unit) Получите буфер кадра с устройства с заданным таймаутом. |
static String | getHostFeatures () Запрашивает у хоста ADB набор поддерживаемых функций. |
static SocketChannel | open (InetSocketAddress adbSockAddr, IDevice device, int devicePort) Создайте и подключите новый сквозной сокет от хоста к порту на устройстве. |
static SocketChannel | rawAdbService (InetSocketAddress socketAddress, IDevice device, String command, AdbHelper.AdbService service) Запустите службу на удалённом устройстве. |
static SocketChannel | rawExec (InetSocketAddress socketAddress, IDevice device, String executable, String[] parameters) Запустите службу host:exec на удаленном устройстве. |
static AdbHelper.AdbResponse | readAdbResponse (SocketChannel chan, boolean readDiagString) Считывает ответ от ADB после выполнения команды. |
static void | reboot (String into, InetSocketAddress adbSockAddr, IDevice device) Перезагрузите устройство. |
static void | removeForward (InetSocketAddress adbSockAddr, IDevice device, String localPortSpec) Удалите переадресацию портов между локальным и удаленным портами. |
static void | removeReverse (InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec) Удалите порт, переключаясь между удаленным и локальным портами. |
static void | root (InetSocketAddress adbSockAddr, IDevice device) Попросите демона adb получить права root на устройстве. |
static void | setDevice (SocketChannel adbChan, String deviceSerialNumber) указывает adb на необходимость взаимодействия с конкретным устройством. |
static void | setDevice (SocketChannel adbChan, IDevice device) Получив IDevice , получите его серийный номер и дайте команду adb связаться с этим устройством. |
static void | write (SocketChannel chan, byte[] data, int length, int timeout) Запись будет производиться до тех пор, пока не будут записаны все данные в "data", не будет достигнута необязательная длина, не истечет время ожидания или не произойдет сбой соединения. |
static void | write (SocketChannel chan, byte[] data) Запись будет производиться до тех пор, пока не будут записаны все данные в поле "data", либо соединение не будет разорвано, либо не истечет время ожидания. |
Константы
HOST_TRANSPORT
public static final String HOST_TRANSPORT
Постоянное значение: "host:transport:"
Поля
DEFAULT_CHARSET
public static final Charset DEFAULT_CHARSET
Общедоступные методы
createForward
public static void createForward (InetSocketAddress adbSockAddr,
IDevice device,
String localPortSpec,
String remotePortSpec) Создает переадресацию портов между локальным и удаленным портами.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес сокета для подключения к adb. |
device | IDevice : устройство, на котором будет выполняться переадресация портов. |
localPortSpec | String : указание локального порта для переадресации, формат tcp: |
remotePortSpec | String : указание удаленного порта для переадресации, один из следующих: tcp: localabstract: localreserved: локальная файловая система: dev: jdwp: (Только удаленно) |
создать скрытое исключение
public static AdbCommandRejectedException createHiddenException (String message,
boolean errorDuringDeviceSelection)| Параметры |
|---|
message | String |
errorDuringDeviceSelection | boolean |
createJdwpForwardRequest
public static byte[] createJdwpForwardRequest (int pid)
Создает запрос на переадресацию портов для процесса JDWP. Возвращает массив, содержащий "####jwdp:{pid}".
| Параметры |
|---|
pid | int : PID процесса JDWP на устройстве. |
createPassThroughConnection
public static SocketChannel createPassThroughConnection (InetSocketAddress adbSockAddr,
String deviceSerialNumber,
int pid) Создает и устанавливает новый сквозной сокет, соединяющий хост с портом устройства.
| Параметры |
|---|
deviceSerialNumber | String : серийный номер устройства для подключения. Может быть пустым (null), в этом случае подключение будет выполнено к первому доступному устройству. |
pid | int : идентификатор процесса, к которому нужно подключиться. |
createReverse
public static void createReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec,
String localPortSpec) Создает механизм обратного переключения портов между удаленным и локальным портами.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес сокета для подключения к adb. |
device | IDevice : устройство, на котором будет выполнено реверсирование портов. |
remotePortSpec | String : указание удаленного порта для обратного переключения, один из следующих: tcp: localabstract: localreserved: локальная файловая система: dev: jdwp: (Только удаленно) |
localPortSpec | String : указание локального порта, формат tcp: |
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
AdbHelper.AdbService adbService,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits,
InputStream is) Выполняет удаленную команду на устройстве и получает выходные данные. Выходные данные передаются в rcvr по мере их поступления. Команда выполняется удаленной службой, идентифицированной параметром adbService.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес InetSocketAddress для adb. |
adbService | AdbHelper.AdbService : объект AdbHelper.AdbService , используемый для выполнения команды. |
command | String : команда оболочки для выполнения |
device | IDevice : IDevice на котором будет выполнена команда. |
rcvr | IShellOutputReceiver : объект IShellOutputReceiver , который будет принимать вывод команды оболочки. |
maxTimeout | long : максимальный таймаут для выполнения всей команды. Значение 0 означает отсутствие таймаута. |
maxTimeToOutputResponse | long : максимальное время между выводом команд. Если между выводами команд проходит больше времени, метод выбросит исключение ShellCommandUnresponsiveException . Значение 0 означает, что метод будет ждать вывода команды бесконечно и никогда не выбросит исключение. |
maxTimeUnits | TimeUnit : Единицы измерения для ненулевых значений maxTimeout и maxTimeToOutputResponse . |
is | InputStream : необязательный InputStream , который будет передаваться после выполнения команды и перед получением ответа. |
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)Выполняет команду оболочки на устройстве и получает выходные данные. Выходные данные передаются в rcvr по мере их поступления.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес InetSocketAddress для adb. |
command | String : команда оболочки для выполнения |
device | IDevice : IDevice на котором будет выполнена команда. |
rcvr | IShellOutputReceiver : объект IShellOutputReceiver , который будет принимать вывод команды оболочки. |
maxTimeout | long : максимальное время, за которое команда должна завершиться. Значение 0 означает, что ограничение по времени не будет применяться. |
maxTimeToOutputResponse | long : максимальное время между выводом команд. Если между выводами команд проходит больше времени, метод выбросит исключение ShellCommandUnresponsiveException . Значение 0 означает, что метод будет ждать вывода команды бесконечно и никогда не выбросит исключение. |
maxTimeUnits | TimeUnit : Единицы измерения для ненулевых значений maxTimeout и maxTimeToOutputResponse . |
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)Выполняет команду оболочки на устройстве и получает выходные данные. Выходные данные передаются в rcvr по мере их поступления.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес InetSocketAddress для adb. |
command | String : команда оболочки для выполнения |
device | IDevice : IDevice на котором будет выполнена команда. |
rcvr | IShellOutputReceiver : объект IShellOutputReceiver , который будет принимать вывод команды оболочки. |
maxTimeToOutputResponse | long : максимальное время между выводом команд. Если между выводами команд проходит больше времени, метод выбросит исключение ShellCommandUnresponsiveException . Значение 0 означает, что метод будет ждать вывода команды бесконечно и никогда не выбросит исключение. |
maxTimeUnits | TimeUnit : Единицы измерения для ненулевых значений maxTimeToOutputResponse . |
public static byte[] formAdbRequest (String payloadString)
Создайте ASCII-строку, перед которой расположены четыре шестнадцатеричные цифры. Открывающая строка "####" обозначает длину остальной части строки, закодированную в ASCII-шестнадцатеричном формате (регистр не имеет значения).
| Параметры |
|---|
payloadString | String |
getFeatures
public static String getFeatures (IDevice device)
Запрашивает у устройства набор поддерживаемых функций.
| Параметры |
|---|
device | IDevice : устройство, на котором будет выполняться переадресация портов. |
getFrameBuffer
public static RawImage getFrameBuffer (InetSocketAddress adbSockAddr,
IDevice device,
long timeout,
TimeUnit unit)Получите буфер кадра с устройства с заданным таймаутом. Таймаут, равный 0, означает, что ожидание будет длиться бесконечно.
| Параметры |
|---|
adbSockAddr | InetSocketAddress |
device | IDevice |
timeout | long |
unit | TimeUnit |
getHostFeatures
public static String getHostFeatures ()
Запрашивает у хоста ADB набор поддерживаемых функций.
открыть
public static SocketChannel open (InetSocketAddress adbSockAddr,
IDevice device,
int devicePort)Создайте и подключите новый сквозной сокет от хоста к порту на устройстве.
| Параметры |
|---|
device | IDevice : устройство, к которому нужно подключиться. Может быть пустым (null), в этом случае подключение будет выполнено к первому доступному устройству. |
devicePort | int : порт, который мы открываем |
rawAdbService
public static SocketChannel rawAdbService (InetSocketAddress socketAddress,
IDevice device,
String command,
AdbHelper.AdbService service)Вызовите службу на удалённом устройстве. Верните сокетный канал, подключенный к выполняющемуся процессу.
Функция ddlmib отказывается от права собственности на возвращаемый объект SocketChannel и должна быть явно закрыта после использования.
| Параметры |
|---|
device | IDevice : устройство, к которому нужно подключиться. Может быть пустым (null), в этом случае подключение будет выполнено к первому доступному устройству. |
command | String : команда для выполнения |
service | AdbHelper.AdbService : объект AdbHelper.AdbService , используемый для выполнения команды. |
rawExec
public static SocketChannel rawExec (InetSocketAddress socketAddress,
IDevice device,
String executable,
String[] parameters)Вызовите службу host:exec на удаленном устройстве. Верните канал сокета, подключенный к выполняющемуся процессу. Обратите внимание, что служба exec не различает стандартный вывод (stdout) и стандартную ошибку (stderr), поэтому все, что читается из сокета, может поступать из любого из этих источников и чередоваться.
Функция ddlmib отказывается от права собственности на возвращаемый объект SocketChannel и должна быть явно закрыта после использования.
| Параметры |
|---|
device | IDevice : устройство, к которому нужно подключиться. Может быть пустым (null), в этом случае подключение будет выполнено к первому доступному устройству. |
executable | String : абсолютный путь к исполняемому файлу для запуска. |
parameters | String : параметры, которые будут переданы при запуске исполняемого файла. |
readAdbResponse
public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan,
boolean readDiagString)Считывает ответ от ADB после выполнения команды.
| Параметры |
|---|
chan | SocketChannel : Сокетный канал, подключенный к adb. |
readDiagString | boolean : Если true, мы ожидаем, что за ответом OKAY последует диагностическая строка. В противном случае мы ожидаем, что за ответом FAIL последует только диагностическая строка. |
| Броски |
|---|
TimeoutException | в случае истечения времени ожидания соединения. |
IOException | в случае ошибки ввода-вывода в соединении. |
перезагрузить
public static void reboot (String into,
InetSocketAddress adbSockAddr,
IDevice device)Перезагрузите устройство.
| Параметры |
|---|
into | String : в какой режим следует перезагрузиться (восстановление, загрузчик). Или null для просто перезагрузки. |
adbSockAddr | InetSocketAddress |
device | IDevice |
удалитьПереадресацию
public static void removeForward (InetSocketAddress adbSockAddr,
IDevice device,
String localPortSpec)Удалите переадресацию портов между локальным и удаленным портами.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес сокета для подключения к adb. |
device | IDevice : устройство, на котором следует удалить переадресацию портов. |
localPortSpec | String : указание локального порта, который был перенаправлен, должно иметь формат tcp: |
removeReverse
public static void removeReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec)Удалите порт, переключаясь между удаленным и локальным портами.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес сокета для подключения к adb. |
device | IDevice : устройство, на котором необходимо удалить реверсивный порт. |
remotePortSpec | String : спецификация удаленного порта в обратном порядке, одна из следующих: tcp: localabstract: localreserved: локальная файловая система: dev: jdwp: (Только удаленно) |
корень
public static void root (InetSocketAddress adbSockAddr,
IDevice device)Попросите демона adb получить права root на устройстве. Это может завершиться незаметно и успешно только в сборках для разработчиков. Дополнительную информацию см. в разделе "adb root". Если вам нужно узнать, удалось ли это, вы можете проверить результат выполнения команды executeRemoteCommand в 'echo \$USER_ID'; если он равен 0, значит, adbd запущен от имени root.
| Параметры |
|---|
adbSockAddr | InetSocketAddress |
device | IDevice |
setDevice
public static void setDevice (SocketChannel adbChan,
String deviceSerialNumber)указывает adb на необходимость взаимодействия с конкретным устройством.
| Параметры |
|---|
adbChan | SocketChannel : сокетное соединение с adb |
deviceSerialNumber | String : серийный номер устройства, с которым нужно связаться; если значение равно null, по умолчанию выбирается устройство, выбранное adb. |
setDevice
public static void setDevice (SocketChannel adbChan,
IDevice device)Получив IDevice , получите его серийный номер и дайте команду adb связаться с этим устройством.
| Параметры |
|---|
adbChan | SocketChannel : сокетное соединение с adb. |
device | IDevice : устройство, с которым осуществляется связь. |
писать
public static void write (SocketChannel chan,
byte[] data,
int length,
int timeout)Запись продолжается до тех пор, пока не будут записаны все данные в массиве "data", не будет достигнута необязательная длина, не истечет время ожидания или соединение не будет разорвано. Возвращает "true", если все данные были записаны.
| Параметры |
|---|
chan | SocketChannel : открытый сокет для записи. |
data | byte : буфер для отправки. |
length | int : длина буфера для записи или -1 для отправки всего буфера. |
timeout | int : Значение таймаута. Таймаут, равный нулю, означает «ждать бесконечно». |
| Броски |
|---|
TimeoutException | в случае истечения времени ожидания соединения. |
IOException | в случае ошибки ввода-вывода в соединении. |
писать
public static void write (SocketChannel chan,
byte[] data)Запись будет производиться до тех пор, пока не будут записаны все данные в поле "data", либо соединение не будет разорвано, либо не истечет время ожидания.
Здесь используется значение тайм-аута по умолчанию.
| Параметры |
|---|
chan | SocketChannel : открытый сокет для записи. |
data | byte : буфер для отправки. |
| Броски |
|---|
TimeoutException | в случае истечения времени ожидания соединения. |
IOException | в случае ошибки ввода-вывода в соединении. |
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-06-22 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2026-06-22 UTC."],[],[]]