AdbHelper

public final class AdbHelper
extends Object

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


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

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

В настоящее время используется неблокирующий ввод-вывод с ожиданием в цикле (spin-wait). Селектор был бы более эффективным, но кажется излишним для наших целей.

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

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

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

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

создать скрытое исключение

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Параметры
message String

errorDuringDeviceSelection boolean

Возвраты
AdbCommandRejectedException

создать скрытое исключение

public static AdbCommandRejectedException createHiddenException (String message)

Параметры
message String

Возвраты
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

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

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

Возвраты
byte[]

createPassThroughConnection

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

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

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

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

Возвраты
SocketChannel

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

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:

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

executeRemoteCommand

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

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

См. также:

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 .

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

См. также:

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 .

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

См. также:

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

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

Параметры
payloadString String

Возвраты
byte[]

getFeatures

public static String getFeatures (IDevice device)

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

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

Возвраты
String

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

getFrameBuffer

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

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

Параметры
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Возвраты
RawImage

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

getHostFeatures

public static String getHostFeatures ()

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

Возвраты
String

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

открыть

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

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

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

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

Возвраты
SocketChannel

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

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

Возвраты
SocketChannel

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

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

Возвраты
SocketChannel

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

readAdbResponse

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

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

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

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

Возвраты
AdbHelper.AdbResponse

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

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

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

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

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

adbSockAddr InetSocketAddress

device IDevice

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

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

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

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

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

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

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

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

removeReverse

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

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

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

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

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

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

корень

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

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

Параметры
adbSockAddr InetSocketAddress

device IDevice

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

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

указывает adb на необходимость взаимодействия с конкретным устройством.

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

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

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

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

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

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

device IDevice : устройство, с которым осуществляется связь.

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

писать

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 в случае ошибки ввода-вывода в соединении.