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 baixo nível.

Atualmente, isso usa E/S de espera em loop sem bloqueio. Um seletor seria mais eficiente, mas parece exagerado 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, 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 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 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)

Cria e conecta 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)

Invocar 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, String deviceSerialNumber)

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

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 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 do 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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, deve estar no formato tcp:

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

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 conforme chega. O comando é executado pelo serviço remoto identificado pelo parâmetro adbService.

Parâmetros
adbSockAddr InetSocketAddress: o 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 resposta ao comando. Se mais tempo passar entre a resposta ao comando, o método vai gerar ShellCommandUnresponsiveException. Um valor de 0 significa que o método vai aguardar indefinidamente a resposta ao comando e nunca vai gerar uma exceção.

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

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

Gera
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.
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
IOException 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 conforme chega.

Parâmetros
adbSockAddr InetSocketAddress: o 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 resposta ao comando. Se mais tempo passar entre a resposta ao comando, o método vai gerar ShellCommandUnresponsiveException. Um valor de 0 significa que o método vai aguardar indefinidamente a resposta ao comando e nunca vai gerar uma exceção.

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

Gera
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.
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
IOException 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 maxTimeToOutputResponse, 
                TimeUnit maxTimeUnits)

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

Parâmetros
adbSockAddr InetSocketAddress: o 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 resposta ao comando. Se mais tempo passar entre a resposta ao comando, o método vai gerar ShellCommandUnresponsiveException. Um valor de 0 significa que o método vai aguardar indefinidamente a resposta ao comando e nunca vai gerar uma exceção.

maxTimeUnits TimeUnit: unidades para valores maxTimeToOutputResponse diferentes de zero.

Gera
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.
TimeoutException em caso de tempo limite na conexão ao enviar o comando.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException em caso de erro de E/S na conexão.

abrir

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

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

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

devicePort int: a porta que estamos abrindo

Retorna
SocketChannel

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

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. Nesse caso, a conexão será feita 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
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)

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

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. Nesse caso, a conexão será feita 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
com.android.ddmlib.AdbCommandRejectedException
com.android.ddmlib.TimeoutException
java.io.IOException
AdbCommandRejectedException
IOException
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 "true", 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.
IOException em caso de erro de E/S na conexão.

reinicializar

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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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 do 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException em caso de erro de E/S na conexão.

root

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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException 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
AdbCommandRejectedException se o adb rejeitar o comando
TimeoutException em caso de tempo limite na conexão.
IOException em caso de erro de E/S na conexão.

gravação

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.
IOException em caso de erro de E/S na conexão.

gravação

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.
IOException em caso de erro de E/S na conexão.