AdbHelper

public final class AdbHelper
extends Object

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


Classe auxiliar para processar solicitações e conexões com o adb.

AndroidDebugBridge é a API pública para conexão com o adb, enquanto AdbHelper faz o trabalho de nível baixo.

Atualmente, isso usa E/S não bloqueadora de espera em loop. Um seletor seria mais eficiente, mas parece exagero para o que estamos fazendo aqui.

Resumo

Classes aninhadas

class AdbHelper.AdbResponse

Resposta do ADB. 

Constantes

String HOST_TRANSPORT

Campos

public static final Charset DEFAULT_CHARSET

Métodos públicos

static void createForward(InetSocketAddress adbSockAddr, IDevice device, String localPortSpec, String remotePortSpec)

Cria um encaminhamento de porta entre uma porta local e uma remota.

static AdbCommandRejectedException createHiddenException(String message, boolean errorDuringDeviceSelection)
static AdbCommandRejectedException createHiddenException(String message)
static byte[] createJdwpForwardRequest(int pid)

Cria uma solicitação de encaminhamento de porta para um processo jdwp.

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

Cria e conecta um novo soquete de passagem do host a uma porta no dispositivo.

static void createReverse(InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec, String localPortSpec)

Cria uma inversão de porta entre uma porta remota e uma local.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)

Executa um comando do shell no dispositivo e recupera a saída.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, AdbHelper.AdbService adbService, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits, InputStream is)

Executa um comando remoto no dispositivo e recupera a saída.

static void executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)

Executa um comando do shell no dispositivo e recupera a saída.

static byte[] formAdbRequest(String payloadString)

Crie uma string ASCII precedida por quatro dígitos hexadecimais.

static String getFeatures(IDevice device)

Consulta um conjunto de recursos compatíveis do dispositivo.

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

Recupera o buffer de frame do dispositivo com o tempo limite especificado.

static String getHostFeatures()

Consulta um conjunto de recursos compatíveis do host ADB.

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

Crie e conecte um novo soquete de passagem do host a uma porta no dispositivo.

static SocketChannel rawAdbService(InetSocketAddress socketAddress, IDevice device, String command, AdbHelper.AdbService service)

Invocar o serviço em um dispositivo remoto.

static SocketChannel rawExec(InetSocketAddress socketAddress, IDevice device, String executable, String[] parameters)

Invoca o serviço host:exec em um dispositivo remoto.

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

Lê a resposta do ADB após um comando.

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

Reinicialize o dispositivo.

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

Remove um encaminhamento de porta entre uma porta local e uma remota.

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

Remova uma inversão de porta entre uma porta remota e uma local.

static void root(InetSocketAddress adbSockAddr, IDevice device)

Peça ao daemon adb para se tornar root no dispositivo.

static void setDevice(SocketChannel adbChan, IDevice device)

Dado um IDevice, pegue o número de série e diga ao adb para se comunicar com esse dispositivo.

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

diz ao adb para se comunicar com um dispositivo específico

static void write(SocketChannel chan, byte[] data, int length, int timeout)

Grave até que todos os dados em "data" sejam gravados, o comprimento opcional seja atingido, o tempo limite expire ou a conexão falhe.

static void write(SocketChannel chan, byte[] data)

Grave até que todos os dados em "data" sejam gravados ou a conexão falhe ou atinja o tempo limite.

Constantes

HOST_TRANSPORT

public static final String HOST_TRANSPORT

Valor da constante: "host:transport:"

Campos

DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET

Métodos públicos

createForward

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

Cria um encaminhamento de porta entre uma porta local e uma remota.

Parâmetros
adbSockAddr InetSocketAddress: o endereço de soquete para se conectar ao adb

device IDevice: o dispositivo em que o encaminhamento de porta será feito

localPortSpec String: especificação da porta local a ser encaminhada, deve estar no formato tcp:

remotePortSpec String: especificação da porta remota para encaminhar, uma das seguintes opções: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (somente remoto)

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Parâmetros
message String

errorDuringDeviceSelection boolean

Retorna
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

Parâmetros
message String

Retorna
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

Cria uma solicitação de encaminhamento de porta para um processo jdwp. Isso retorna uma matriz que contém "####jwdp:{pid}".

Parâmetros
pid int: o PID do processo jdwp no dispositivo.

Retorna
byte[]

createPassThroughConnection

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

Cria e conecta um novo soquete de passagem do host a uma porta no dispositivo.

Parâmetros
deviceSerialNumber String: o número de série do dispositivo a ser conectado. Pode ser nulo ou vazio. Nesse caso, a conexão será feita com o primeiro dispositivo disponível.

pid int: o PID do processo a ser conectado.

Retorna
SocketChannel

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

createReverse

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

Cria uma inversão de porta entre uma porta remota e uma local.

Parâmetros
adbSockAddr InetSocketAddress: o endereço do soquete para se conectar ao adb

device IDevice: o dispositivo em que a inversão de porta será feita

remotePortSpec String: especificação da porta remota para reverter, uma das seguintes: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (somente remoto)

localPortSpec String: especificação da porta local, que deve estar no formato tcp:

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits)

Executa um comando do shell no dispositivo e recupera a saída. A saída é entregue a rcvr assim que chega.

Parâmetros
adbSockAddr InetSocketAddress: o ERROR(/InetSocketAddress) para adb.

command String: o comando do shell a ser executado

device IDevice: o IDevice em que o comando será executado.

rcvr IShellOutputReceiver: o IShellOutputReceiver que vai receber a saída do comando do shell.

maxTimeToOutputResponse long: tempo máximo entre a saída de comandos. Se mais tempo passar entre a saída do comando, o método vai gerar ShellCommandUnresponsiveException. Um valor 0 significa que o método vai aguardar para sempre a saída do comando e nunca vai gerar uma exceção.

maxTimeUnits TimeUnit: unidades para valores maxTimeToOutputResponse diferentes de zero.

Gera
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
AdbCommandRejectedException se o adb rejeitar o comando
ShellCommandUnresponsiveException caso o comando do shell não envie nenhuma saída por um período maior que maxTimeToOutputResponse.
em caso de erro de E/S na conexão.

Confira também:

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                AdbHelper.AdbService adbService, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeout, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits, 
                InputStream is)

Executa um comando remoto no dispositivo e recupera a saída. A saída é entregue a rcvr assim que chega. O comando é executado pelo serviço remoto identificado pelo parâmetro adbService.

Parâmetros
adbSockAddr InetSocketAddress: o ERROR(/InetSocketAddress) para adb.

adbService AdbHelper.AdbService: o AdbHelper.AdbService a ser usado para executar o comando.

command String: o comando do shell a ser executado

device IDevice: o IDevice em que o comando será executado.

rcvr IShellOutputReceiver: o IShellOutputReceiver que vai receber a saída do comando do shell.

maxTimeout long: tempo limite máximo para a execução do comando completo. Um valor de 0 significa que não há tempo limite.

maxTimeToOutputResponse long: tempo máximo entre a saída de comandos. Se mais tempo passar entre a saída do comando, o método vai gerar ShellCommandUnresponsiveException. Um valor 0 significa que o método vai aguardar para sempre a saída do comando e nunca vai gerar uma exceção.

maxTimeUnits TimeUnit: unidades para valores maxTimeout e maxTimeToOutputResponse diferentes de zero.

is InputStream: um ERROR(/InputStream) opcional a ser transmitido após a invocação do comando e antes da recuperação da resposta.

Gera
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
AdbCommandRejectedException se o adb rejeitar o comando
ShellCommandUnresponsiveException caso o comando do shell não envie nenhuma saída por um período maior que maxTimeToOutputResponse.
em caso de erro de E/S na conexão.

Confira também:

executeRemoteCommand

public static void executeRemoteCommand (InetSocketAddress adbSockAddr, 
                String command, 
                IDevice device, 
                IShellOutputReceiver rcvr, 
                long maxTimeout, 
                long maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits)

Executa um comando do shell no dispositivo e recupera a saída. A saída é entregue a rcvr assim que chega.

Parâmetros
adbSockAddr InetSocketAddress: o ERROR(/InetSocketAddress) para adb.

command String: o comando do shell a ser executado

device IDevice: o IDevice em que o comando será executado.

rcvr IShellOutputReceiver: o IShellOutputReceiver que vai receber a saída do comando do shell.

maxTimeout long: tempo máximo para o comando retornar. Um valor de 0 significa que nenhum tempo limite máximo será aplicado.

maxTimeToOutputResponse long: tempo máximo entre a saída de comandos. Se mais tempo passar entre a saída do comando, o método vai gerar ShellCommandUnresponsiveException. Um valor 0 significa que o método vai aguardar para sempre a saída do comando e nunca vai gerar uma exceção.

maxTimeUnits TimeUnit: unidades para valores maxTimeout e maxTimeToOutputResponse diferentes de zero.

Gera
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
AdbCommandRejectedException se o adb rejeitar o comando
ShellCommandUnresponsiveException caso o comando do shell não envie nenhuma saída por um período maior que maxTimeToOutputResponse.
em caso de erro de E/S na conexão.

Confira também:

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

Crie uma string ASCII precedida por quatro dígitos hexadecimais. O "####" inicial é o comprimento do restante da string, codificado como hexadecimal ASCII (maiúsculas e minúsculas não importam).

Parâmetros
payloadString String

Retorna
byte[]

getFeatures

public static String getFeatures (IDevice device)

Consulta um conjunto de recursos compatíveis do dispositivo.

Parâmetros
device IDevice: o dispositivo em que o encaminhamento de porta será feito

Retorna
String

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

getFrameBuffer

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

Recupera o buffer de frame do dispositivo com o tempo limite especificado. Um tempo limite de 0 indica que ele vai esperar para sempre.

Parâmetros
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Retorna
RawImage

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

getHostFeatures

public static String getHostFeatures ()

Consulta um conjunto de recursos compatíveis do host ADB.

Retorna
String

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

abrir

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

Crie e conecte um novo soquete de passagem do host a uma porta no dispositivo.

Parâmetros
device IDevice: o dispositivo a ser conectado. Pode ser nulo, caso em que a conexão será com o primeiro dispositivo disponível.

devicePort int: a porta que estamos abrindo

Retorna
SocketChannel

Gera
TimeoutException em caso de tempo limite na conexão.
em caso de erro de E/S na conexão.
AdbCommandRejectedException se o adb rejeitar o comando

rawAdbService

public static SocketChannel rawAdbService (InetSocketAddress socketAddress, 
                IDevice device, 
                String command, 
                AdbHelper.AdbService service)

Invocar o serviço em um dispositivo remoto. Retorna um canal de soquete conectado ao processo em execução.

ddlmib renuncia à propriedade do SocketChannel retornado e precisa ser fechado explicitamente após o uso.

Parâmetros
device IDevice: o dispositivo a ser conectado. Pode ser nulo, caso em que a conexão será com o primeiro dispositivo disponível.

command String: o comando a ser executado

service AdbHelper.AdbService: o AdbHelper.AdbService a ser usado para executar o comando.

Retorna
SocketChannel

Gera
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

rawExec

public static SocketChannel rawExec (InetSocketAddress socketAddress, 
                IDevice device, 
                String executable, 
                String[] parameters)

Invoca o serviço host:exec em um dispositivo remoto. Retorna um canal de soquete conectado ao processo em execução. O serviço de execução não diferencia stdout e stderr. Portanto, o que é lido do soquete pode vir de qualquer saída e ser intercalado.

O ddlmib renuncia à propriedade do SocketChannel retornado e precisa ser fechado explicitamente após o uso.

Parâmetros
device IDevice: o dispositivo a ser conectado. Pode ser nulo, caso em que a conexão será com o primeiro dispositivo disponível.

executable String: o caminho absoluto do executável a ser executado

parameters String: os parâmetros a serem recebidos ao executar o executável

Retorna
SocketChannel

Gera
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

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

Lê a resposta do ADB após um comando.

Parâmetros
chan SocketChannel: o canal de soquete conectado ao adb.

readDiagString boolean: se for verdadeiro, esperamos que uma resposta OKAY seja seguida por uma string de diagnóstico. Caso contrário, esperamos que a string de diagnóstico siga uma falha.

Retorna
AdbHelper.AdbResponse

Gera
TimeoutException em caso de tempo limite na conexão.
em caso de erro de E/S na conexão.

reiniciar

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

Reinicialize o dispositivo.

Parâmetros
into String: o que reiniciar (recuperação, carregador de inicialização). Ou nulo para apenas reiniciar.

adbSockAddr InetSocketAddress

device IDevice

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

removeForward

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

Remove um encaminhamento de porta entre uma porta local e uma remota.

Parâmetros
adbSockAddr InetSocketAddress: o endereço do soquete para se conectar ao adb

device IDevice: o dispositivo em que o encaminhamento de porta será removido

localPortSpec String: especificação da porta local encaminhada, que deve estar no formato tcp:

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

removeReverse

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

Remova uma inversão de porta entre uma porta remota e uma local.

Parâmetros
adbSockAddr InetSocketAddress: o endereço de soquete para se conectar ao adb

device IDevice: o dispositivo em que a inversão de porta será removida

remotePortSpec String: especificação da porta remota invertida para um destes: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (somente remoto)

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

raiz

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

Peça ao daemon adb para se tornar root no dispositivo. Isso pode falhar silenciosamente e só vai funcionar em builds de desenvolvedor. Consulte "adb root" para mais informações. Se você precisar saber se a operação foi bem-sucedida, verifique o resultado de executeRemoteCommand em "echo \$USER_ID". Se for 0, o adbd estará sendo executado como root.

Parâmetros
adbSockAddr InetSocketAddress

device IDevice

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

Dado um IDevice, pegue o número de série e diga ao adb para se comunicar com esse dispositivo.

Parâmetros
adbChan SocketChannel: a conexão de soquete com o adb.

device IDevice: o dispositivo com que você quer falar.

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

diz ao adb para se comunicar com um dispositivo específico

Parâmetros
adbChan SocketChannel: a conexão de soquete com o adb

deviceSerialNumber String: o número de série do dispositivo com que se comunicar. Se for nulo, o dispositivo padrão selecionado será o escolhido pelo adb.

Gera
TimeoutException em caso de tempo limite na conexão.
AdbCommandRejectedException se o adb rejeitar o comando
em caso de erro de E/S na conexão.

escrever

public static void write (SocketChannel chan, 
                byte[] data, 
                int length, 
                int timeout)

Grave até que todos os dados em "data" sejam gravados, o comprimento opcional seja atingido, o tempo limite expire ou a conexão falhe. Retorna "true" se todos os dados foram gravados.

Parâmetros
chan SocketChannel: o soquete aberto em que gravar.

data byte: o buffer a ser enviado.

length int: o comprimento a ser gravado ou -1 para enviar o buffer inteiro.

timeout int: o valor de tempo limite. Um tempo limite de zero significa "esperar para sempre".

Gera
TimeoutException em caso de tempo limite na conexão.
em caso de erro de E/S na conexão.

escrever

public static void write (SocketChannel chan, 
                byte[] data)

Grave até que todos os dados em "data" sejam gravados ou a conexão falhe ou atinja o tempo limite.

Isso usa o valor de tempo limite padrão.

Parâmetros
chan SocketChannel: o soquete aberto em que gravar.

data byte: o buffer a ser enviado.

Gera
TimeoutException em caso de tempo limite na conexão.
em caso de erro de E/S na conexão.