Вспомогательный класс для обработки запросов и подключений к adb.
В настоящее время используется неблокируемый ввод-вывод с ожиданием вращения. Селектор был бы эффективнее, но для нашей задачи это кажется излишеством.
Вложенные классы |
|---|
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, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeToOutputResponse, TimeUnit maxTimeUnits) Выполняет команду оболочки на устройстве и извлекает выходные данные. |
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 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, IDevice device) При наличии IDevice возьмите серийный номер и сообщите adb, чтобы он связался с этим устройством. |
static void | setDevice (SocketChannel adbChan, String deviceSerialNumber) сообщает adb о необходимости подключения к определенному устройству |
static void | write (SocketChannel chan, byte[] data, int length, int timeout) Записывайте до тех пор, пока не будут записаны все данные в «data», не будет достигнута необязательная длина, не истечет время ожидания или не произойдет сбой соединения. |
static void | write (SocketChannel chan, byte[] data) Записывайте до тех пор, пока все данные в «data» не будут записаны или соединение не прервется или не истечет время ожидания. |
Константы
ХОСТ_ТРАНСПОРТ
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: локальная аннотация: localreserved: локальная файловая система: дев: jdwp: (только удаленно) |
createHiddenException
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 на устройстве. |
создатьPassThroughConnection
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: локальная аннотация: localreserved: локальная файловая система: дев: jdwp: (только удаленно) |
localPortSpec | String : спецификация локального порта, должна иметь формат tcp: |
выполнитьRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits) Выполняет команду оболочки на устройстве и получает выходные данные. Вывод передается rcvr по мере поступления.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : ERROR(/InetSocketAddress) для adb. |
command | String : команда оболочки для выполнения |
device | IDevice : IDevice на котором следует выполнить команду. |
rcvr | IShellOutputReceiver : IShellOutputReceiver , который будет получать вывод команды оболочки. |
maxTimeToOutputResponse | long : максимальное время между выводом команд. Если между выводом команд пройдёт больше времени, метод выбросит исключение ShellCommandUnresponsiveException . Значение 0 означает, что метод будет ждать вывода команды бесконечно и никогда не выдаст исключение. |
maxTimeUnits | TimeUnit : Единицы измерения для ненулевых значений maxTimeToOutputResponse . |
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 : ERROR(/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 : необязательный ERROR(/InputStream) , который будет передан после вызова команды и перед получением ответа. |
выполнитьRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)Выполняет команду оболочки на устройстве и получает выходные данные. Вывод передается rcvr по мере поступления.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : ERROR(/InetSocketAddress) для adb. |
command | String : команда оболочки для выполнения |
device | IDevice : IDevice на котором следует выполнить команду. |
rcvr | IShellOutputReceiver : IShellOutputReceiver , который будет получать вывод команды оболочки. |
maxTimeout | long : максимальное время возврата команды. Значение 0 означает, что максимальное время ожидания не применяется. |
maxTimeToOutputResponse | long : максимальное время между выводом команд. Если между выводом команд пройдёт больше времени, метод выбросит исключение ShellCommandUnresponsiveException . Значение 0 означает, что метод будет ждать вывода команды бесконечно и никогда не выдаст исключение. |
maxTimeUnits | TimeUnit : Единицы измерения для ненулевых значений maxTimeout и maxTimeToOutputResponse . |
public static byte[] formAdbRequest (String payloadString)
Создайте строку ASCII, которой предшествуют четыре шестнадцатеричные цифры. Начальный символ "####" — это длина оставшейся части строки, закодированной в шестнадцатеричном формате ASCII (регистр не имеет значения).
| Параметры |
|---|
payloadString | String |
getFeatures
public static String getFeatures (IDevice device)
Запрашивает набор поддерживаемых функций устройства.
| Параметры |
|---|
device | IDevice : устройство, на котором будет выполняться переадресация портов. |
получитьFrameBuffer
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 : устройство для подключения. Может быть пустым, в этом случае подключение будет установлено к первому доступному устройству. |
devicePort | int : порт, который мы открываем |
rawAdbService
public static SocketChannel rawAdbService (InetSocketAddress socketAddress,
IDevice device,
String command,
AdbHelper.AdbService service)Вызовите службу на удалённом устройстве. Верните сокет-канал, подключенный к выполняющемуся процессу.
ddlmib отказывается от права собственности на возвращенный SocketChannel и должен быть явно закрыт после использования.
| Параметры |
|---|
device | IDevice : устройство для подключения. Может быть пустым, в этом случае подключение будет установлено к первому доступному устройству. |
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 : устройство для подключения. Может быть пустым, в этом случае подключение будет установлено к первому доступному устройству. |
executable | String : абсолютный путь к исполняемому файлу для запуска |
parameters | String : параметры, которые будут переданы при запуске исполняемого файла. |
readAdbResponse
public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan,
boolean readDiagString)Считывает ответ ADB после команды.
| Параметры |
|---|
chan | SocketChannel : Канал сокета, подключенный к adb. |
readDiagString | boolean : Если true, мы ожидаем, что за ответом OKAY последует диагностическая строка. В противном случае мы ожидаем, что диагностическая строка последует только за ответом FAIL. |
| Броски |
|---|
TimeoutException | в случае тайм-аута соединения. |
| в случае ошибки ввода-вывода при соединении. |
перезагрузить
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: |
удалитьОбратный
public static void removeReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec)Удалить реверсирование портов между удаленным и локальным портами.
| Параметры |
|---|
adbSockAddr | InetSocketAddress : адрес сокета для подключения к adb |
device | IDevice : устройство, на котором необходимо удалить реверс порта |
remotePortSpec | String : спецификация удаленного порта, обратная одной из: tcp: локальная аннотация: localreserved: локальная файловая система: дев: 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,
IDevice device)При наличии IDevice возьмите серийный номер и сообщите adb, чтобы он связался с этим устройством.
| Параметры |
|---|
adbChan | SocketChannel : сокетное соединение с adb. |
device | IDevice : устройство для общения. |
setDevice
public static void setDevice (SocketChannel adbChan,
String deviceSerialNumber)сообщает adb о необходимости подключения к определенному устройству
| Параметры |
|---|
adbChan | SocketChannel : сокетное соединение с adb |
deviceSerialNumber | String : серийный номер устройства, с которым нужно связаться. Если значение равно null, то по умолчанию будет выбрано устройство, выбранное adb. |
писать
public static void write (SocketChannel chan,
byte[] data,
int length,
int timeout)Запись продолжается до тех пор, пока не будут записаны все данные в «data», не будет достигнута необязательная длина, не истечёт тайм-аут или не произойдёт сбой соединения. Возвращает «true», если все данные были записаны.
| Параметры |
|---|
chan | SocketChannel : открытый сокет для записи. |
data | byte : буфер для отправки. |
length | int : длина записи или -1 для отправки всего буфера. |
timeout | int : значение тайм-аута. Нулевой тайм-аут означает «ожидание вечно». |
| Броски |
|---|
TimeoutException | в случае тайм-аута соединения. |
| в случае ошибки ввода-вывода при соединении. |
писать
public static void write (SocketChannel chan,
byte[] data)Записывайте до тех пор, пока все данные в «data» не будут записаны или соединение не прервется или не истечет время ожидания.
При этом используется значение тайм-аута по умолчанию.
| Параметры |
|---|
chan | SocketChannel : открытый сокет для записи. |
data | byte : буфер для отправки. |
| Броски |
|---|
TimeoutException | в случае тайм-аута соединения. |
| в случае ошибки ввода-вывода при соединении. |
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-12-04 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"]],["Последнее обновление: 2025-12-04 UTC."],[],[]]