AdbHelper

public final class AdbHelper
extends Object

java.lang.Object
com.android.tradefed.device.server.AdbHelper


Вспомогательный класс для обработки запросов и подключений к adb.

AndroidDebugBridge — это общедоступный API для подключения к adb, в то время как AdbHelper выполняет низкоуровневую работу.

В настоящее время используется неблокируемый ввод-вывод с ожиданием вращения. Селектор был бы эффективнее, но для нашей задачи это кажется излишеством.

Краткое содержание

Вложенные классы

class AdbHelper.AdbResponse

Ответ АБР.

Константы

String HOST_TRANSPORT

Поля

public static final Charset DEFAULT_CHARSET

Публичные методы

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: (только удаленно)

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Параметры
message String

errorDuringDeviceSelection boolean

Возврат
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

Параметры
message String

Возврат
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

Создаёт запрос на переадресацию порта к процессу jdwp. Возвращает массив, содержащий "####jwdp:{pid}".

Параметры
pid int : pid процесса jdwp на устройстве.

Возврат
byte[]

создатьPassThroughConnection

public static SocketChannel createPassThroughConnection (InetSocketAddress adbSockAddr, 
                String deviceSerialNumber, 
                int pid)

Создает и подключает новый сквозной сокет от хоста к порту на устройстве.

Параметры
deviceSerialNumber String : серийный номер устройства для подключения. Может быть пустым или иметь значение null. В этом случае подключение будет установлено к первому доступному устройству.

pid int : идентификатор процесса, к которому нужно подключиться.

Возврат
SocketChannel

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

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:

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

выполнить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 .

Броски
TimeoutException в случае тайм-аута соединения при отправке команды.
AdbCommandRejectedException если adb отклоняет команду
ShellCommandUnresponsiveException в случае, если команда оболочки не отправляет никаких выходных данных в течение периода, превышающего maxTimeToOutputResponse .
в случае ошибки ввода-вывода при соединении.

Смотрите также:

выполнитьRemoteCommand

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) , который будет передан после вызова команды и перед получением ответа.

Броски
TimeoutException в случае тайм-аута соединения при отправке команды.
AdbCommandRejectedException если adb отклоняет команду
ShellCommandUnresponsiveException в случае, если команда оболочки не отправляет никаких выходных данных в течение периода, превышающего maxTimeToOutputResponse .
в случае ошибки ввода-вывода при соединении.

Смотрите также:

выполнить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 .

Броски
TimeoutException в случае тайм-аута соединения при отправке команды.
AdbCommandRejectedException если adb отклоняет команду
ShellCommandUnresponsiveException в случае, если команда оболочки не отправляет никаких выходных данных в течение периода, превышающего maxTimeToOutputResponse .
в случае ошибки ввода-вывода при соединении.

Смотрите также:

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

Создайте строку ASCII, которой предшествуют четыре шестнадцатеричные цифры. Начальный символ "####" — это длина оставшейся части строки, закодированной в шестнадцатеричном формате ASCII (регистр не имеет значения).

Параметры
payloadString String

Возврат
byte[]

getFeatures

public static String getFeatures (IDevice device)

Запрашивает набор поддерживаемых функций устройства.

Параметры
device IDevice : устройство, на котором будет выполняться переадресация портов.

Возврат
String

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

получитьFrameBuffer

public static RawImage getFrameBuffer (InetSocketAddress adbSockAddr, 
                IDevice device, 
                long timeout, 
                TimeUnit unit)

Извлечь буфер кадра с устройства с заданным тайм-аутом. Тайм-аут, равный 0, означает, что ожидание будет бесконечным.

Параметры
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Возврат
RawImage

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

getHostFeatures

public static String getHostFeatures ()

Запрашивает набор поддерживаемых функций у хоста ADB.

Возврат
String

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

открыть

public static SocketChannel open (InetSocketAddress adbSockAddr, 
                IDevice device, 
                int devicePort)

Создайте и подключите новый сквозной сокет от хоста к порту на устройстве.

Параметры
device IDevice : устройство для подключения. Может быть пустым, в этом случае подключение будет установлено к первому доступному устройству.

devicePort int : порт, который мы открываем

Возврат
SocketChannel

Броски
TimeoutException в случае тайм-аута соединения.
в случае ошибки ввода-вывода при соединении.
AdbCommandRejectedException если adb отклоняет команду

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 , используемый для запуска команды.

Возврат
SocketChannel

Броски
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

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 : параметры, которые будут переданы при запуске исполняемого файла.

Возврат
SocketChannel

Броски
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan, 
                boolean readDiagString)

Считывает ответ ADB после команды.

Параметры
chan SocketChannel : Канал сокета, подключенный к adb.

readDiagString boolean : Если true, мы ожидаем, что за ответом OKAY последует диагностическая строка. В противном случае мы ожидаем, что диагностическая строка последует только за ответом FAIL.

Возврат
AdbHelper.AdbResponse

Броски
TimeoutException в случае тайм-аута соединения.
в случае ошибки ввода-вывода при соединении.

перезагрузить

public static void reboot (String into, 
                InetSocketAddress adbSockAddr, 
                IDevice device)

Перезагрузите устройство.

Параметры
into String : куда перезагрузить (восстановление, загрузчик). Или null, чтобы просто перезагрузить.

adbSockAddr InetSocketAddress

device IDevice

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

удалитьПереслать

public static void removeForward (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String localPortSpec)

Удалить переадресацию портов между локальным и удаленным портом.

Параметры
adbSockAddr InetSocketAddress : адрес сокета для подключения к adb

device IDevice : устройство, на котором необходимо удалить переадресацию портов.

localPortSpec String : спецификация локального порта, который был перенаправлен, должна иметь формат tcp:

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

удалитьОбратный

public static void removeReverse (InetSocketAddress adbSockAddr, 
                IDevice device, 
                String remotePortSpec)

Удалить реверсирование портов между удаленным и локальным портами.

Параметры
adbSockAddr InetSocketAddress : адрес сокета для подключения к adb

device IDevice : устройство, на котором необходимо удалить реверс порта

remotePortSpec String : спецификация удаленного порта, обратная одной из: tcp: локальная аннотация: localreserved: локальная файловая система: дев: jdwp: (только удаленно)

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

корень

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

Запросите демон adb на доступ root на устройстве. Это может привести к сбою и успешному завершению только в сборках для разработчиков. Подробнее см. в разделе «adb root». Чтобы узнать, удалось ли выполнить команду, проверьте результат выполнения executeRemoteCommand на 'echo \$USER_ID'. Если он равен 0, adbd запущен от имени root.

Параметры
adbSockAddr InetSocketAddress

device IDevice

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

При наличии IDevice возьмите серийный номер и сообщите adb, чтобы он связался с этим устройством.

Параметры
adbChan SocketChannel : сокетное соединение с adb.

device IDevice : устройство для общения.

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если adb отклоняет команду
в случае ошибки ввода-вывода при соединении.

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

сообщает adb о необходимости подключения к определенному устройству

Параметры
adbChan SocketChannel : сокетное соединение с adb

deviceSerialNumber String : серийный номер устройства, с которым нужно связаться. Если значение равно null, то по умолчанию будет выбрано устройство, выбранное adb.

Броски
TimeoutException в случае тайм-аута соединения.
AdbCommandRejectedException если 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 в случае тайм-аута соединения.
в случае ошибки ввода-вывода при соединении.