AdbHelper

public final class AdbHelper
extends Object

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


Clase de ayuda para controlar solicitudes y conexiones a adb.

AndroidDebugBridge es la API pública para conectarse a adb, mientras que AdbHelper se encarga de los aspectos de bajo nivel.

Actualmente, se usa E/S sin bloqueo de espera activa. Un selector sería más eficiente, pero parece excesivo para lo que estamos haciendo aquí.

Resumen

Clases anidadas

class AdbHelper.AdbResponse

Es la respuesta de 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)

Crea un reenvío de puertos entre un puerto local y uno remoto.

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

Crea una solicitud de reenvío de puertos a un proceso de jdwp.

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

Crea y conecta un nuevo socket de transferencia, desde el host a un puerto del dispositivo.

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

Crea una inversión de puertos entre un puerto remoto y uno local.

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

Ejecuta un comando shell en el dispositivo y recupera el resultado.

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

Ejecuta un comando remoto en el dispositivo y recupera el resultado.

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

Ejecuta un comando shell en el dispositivo y recupera el resultado.

static byte[] formAdbRequest(String payloadString)

Crea una cadena ASCII precedida por cuatro dígitos hexadecimales.

static String getFeatures(IDevice device)

Consulta un conjunto de funciones compatibles del dispositivo.

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

Recupera el búfer de fotogramas del dispositivo con el tiempo de espera determinado.

static String getHostFeatures()

Consulta un conjunto de funciones compatibles desde el host de ADB.

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

Crea y conecta un nuevo socket de transferencia, desde el host a un puerto del dispositivo.

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

Invoca el servicio en un dispositivo remoto.

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

Invoca el servicio host:exec en un dispositivo remoto.

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

Lee la respuesta de ADB después de un comando.

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

Reinicia el dispositivo.

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

Quita un reenvío de puertos entre un puerto local y uno remoto.

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

Quita la inversión de un puerto entre un puerto remoto y uno local.

static void root(InetSocketAddress adbSockAddr, IDevice device)

Solicita al daemon de adb que se convierta en raíz en el dispositivo.

static void setDevice(SocketChannel adbChan, IDevice device)

Dado un IDevice, toma el número de serie y dile a adb que se comunique con ese dispositivo.

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

Le indica a adb que se comunique con un dispositivo específico

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

Escribe hasta que se escriban todos los datos en "data", se alcance la longitud opcional, venza el tiempo de espera o falle la conexión.

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

Escribe hasta que se escriban todos los datos en "data" o hasta que falle o se agote el tiempo de espera de la conexión.

Constantes

HOST_TRANSPORT

public static final String HOST_TRANSPORT

Valor de la 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)

Crea un reenvío de puertos entre un puerto local y uno remoto.

Parámetros
adbSockAddr InetSocketAddress: Es la dirección de socket a la que se conectará adb.

device IDevice: Es el dispositivo en el que se realizará el reenvío de puertos.

localPortSpec String: Especificación del puerto local para reenviar, debe tener el formato tcp:

remotePortSpec String: Especificación del puerto remoto al que se reenvía, uno de los siguientes: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Parámetros
message String

errorDuringDeviceSelection boolean

Muestra
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

Parámetros
message String

Muestra
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

Crea una solicitud de reenvío de puertos a un proceso de jdwp. Esto devuelve un array que contiene "####jwdp:{pid}".

Parámetros
pid int: Es el PID del proceso jdwp en el dispositivo.

Muestra
byte[]

createPassThroughConnection

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

Crea y conecta un nuevo socket de transferencia, desde el host a un puerto del dispositivo.

Parámetros
deviceSerialNumber String: Es el número de serie del dispositivo al que se conectará. Puede ser nulo o estar vacío, en cuyo caso la conexión se realizará con el primer dispositivo disponible.

pid int: Es el PID del proceso al que se conectará.

Muestra
SocketChannel

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

createReverse

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

Crea una inversión de puertos entre un puerto remoto y uno local.

Parámetros
adbSockAddr InetSocketAddress: Es la dirección de socket a la que se conectará adb.

device IDevice: Es el dispositivo en el que se realizará la inversión de puertos.

remotePortSpec String: Especificación del puerto remoto al que se revierte, uno de los siguientes: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

localPortSpec String: Especificación del puerto local, debe tener el formato tcp:

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

executeRemoteCommand

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

Ejecuta un comando shell en el dispositivo y recupera el resultado. El resultado se entrega a rcvr a medida que llega.

Parámetros
adbSockAddr InetSocketAddress: Es el ERROR(/InetSocketAddress) para adb.

command String: Es el comando de shell que se ejecutará.

device IDevice: Es el IDevice en el que se ejecutará el comando.

rcvr IShellOutputReceiver: Es el IShellOutputReceiver que recibirá el resultado del comando de shell.

maxTimeToOutputResponse long: Es el tiempo máximo entre la salida de comandos. Si transcurre más tiempo entre las salidas de los comandos, el método arrojará ShellCommandUnresponsiveException. Un valor de 0 significa que el método esperará indefinidamente la salida del comando y nunca arrojará una excepción.

maxTimeUnits TimeUnit: Son las unidades para los valores de maxTimeToOutputResponse distintos de cero.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión al enviar el comando.
AdbCommandRejectedException Si adb rechaza el comando
ShellCommandUnresponsiveException en caso de que el comando shell no envíe ningún resultado durante un período superior a maxTimeToOutputResponse.
en caso de error de E/S en la conexión

executeRemoteCommand

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

Ejecuta un comando remoto en el dispositivo y recupera el resultado. El resultado se entrega a rcvr a medida que llega. El comando se ejecuta mediante el servicio remoto identificado por el parámetro adbService.

Parámetros
adbSockAddr InetSocketAddress: Es el ERROR(/InetSocketAddress) para adb.

adbService AdbHelper.AdbService: Es el AdbHelper.AdbService que se usará para ejecutar el comando.

command String: Es el comando de shell que se ejecutará.

device IDevice: Es el IDevice en el que se ejecutará el comando.

rcvr IShellOutputReceiver: Es el IShellOutputReceiver que recibirá el resultado del comando de shell.

maxTimeout long: Es el tiempo de espera máximo para que se ejecute el comando completo. Un valor de 0 significa que no hay tiempo de espera.

maxTimeToOutputResponse long: Es el tiempo máximo entre la salida de comandos. Si transcurre más tiempo entre las salidas de los comandos, el método arrojará ShellCommandUnresponsiveException. Un valor de 0 significa que el método esperará indefinidamente la salida del comando y nunca arrojará una excepción.

maxTimeUnits TimeUnit: Unidades para los valores maxTimeout y maxTimeToOutputResponse distintos de cero.

is InputStream: Es un ERROR(/InputStream) opcional que se transmitirá después de invocar el comando y antes de recuperar la respuesta.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión al enviar el comando.
AdbCommandRejectedException Si adb rechaza el comando
ShellCommandUnresponsiveException en caso de que el comando shell no envíe ningún resultado durante un período superior a maxTimeToOutputResponse.
en caso de error de E/S en la conexión

executeRemoteCommand

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

Ejecuta un comando shell en el dispositivo y recupera el resultado. El resultado se entrega a rcvr a medida que llega.

Parámetros
adbSockAddr InetSocketAddress: Es el ERROR(/InetSocketAddress) para adb.

command String: Es el comando de shell que se ejecutará.

device IDevice: Es el IDevice en el que se ejecutará el comando.

rcvr IShellOutputReceiver: Es el IShellOutputReceiver que recibirá el resultado del comando de shell.

maxTimeout long: Es el tiempo máximo que puede tardar el comando en devolver una respuesta. Un valor de 0 significa que no se aplicará un tiempo de espera máximo.

maxTimeToOutputResponse long: Es el tiempo máximo entre la salida de comandos. Si transcurre más tiempo entre las salidas de los comandos, el método arrojará ShellCommandUnresponsiveException. Un valor de 0 significa que el método esperará indefinidamente la salida del comando y nunca arrojará una excepción.

maxTimeUnits TimeUnit: Unidades para los valores maxTimeout y maxTimeToOutputResponse distintos de cero.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión al enviar el comando.
AdbCommandRejectedException Si adb rechaza el comando
ShellCommandUnresponsiveException en caso de que el comando shell no envíe ningún resultado durante un período superior a maxTimeToOutputResponse.
en caso de error de E/S en la conexión

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

Crea una cadena ASCII precedida por cuatro dígitos hexadecimales. Los primeros "####" indican la longitud del resto de la cadena, codificada como hexadecimal ASCII (no importa si se usan mayúsculas o minúsculas).

Parámetros
payloadString String

Muestra
byte[]

getFeatures

public static String getFeatures (IDevice device)

Consulta un conjunto de funciones compatibles del dispositivo.

Parámetros
device IDevice: Es el dispositivo en el que se realizará el reenvío de puertos.

Muestra
String

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

getFrameBuffer

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

Recupera el búfer de fotogramas del dispositivo con el tiempo de espera determinado. Un tiempo de espera de 0 indica que esperará indefinidamente.

Parámetros
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Muestra
RawImage

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

getHostFeatures

public static String getHostFeatures ()

Consulta un conjunto de funciones compatibles desde el host de ADB.

Muestra
String

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

abrir

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

Crea y conecta un nuevo socket de transferencia, desde el host a un puerto del dispositivo.

Parámetros
device IDevice: Es el dispositivo al que se conectará. Puede ser nulo, en cuyo caso la conexión se realizará al primer dispositivo disponible.

devicePort int: Es el puerto que abrimos.

Muestra
SocketChannel

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
en caso de error de E/S en la conexión
AdbCommandRejectedException Si adb rechaza el comando

rawAdbService

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

Invoca el servicio en un dispositivo remoto. Devuelve un canal de socket conectado al proceso en ejecución.

ddlmib renuncia a la propiedad del SocketChannel devuelto y se debe cerrar explícitamente después de su uso.

Parámetros
device IDevice: Es el dispositivo al que se conectará. Puede ser nulo, en cuyo caso la conexión se realizará al primer dispositivo disponible.

command String: El comando que se ejecutará

service AdbHelper.AdbService: Es el AdbHelper.AdbService que se usará para ejecutar el comando.

Muestra
SocketChannel

Arroja
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 el servicio host:exec en un dispositivo remoto. Devuelve un canal de socket conectado al proceso en ejecución. Ten en cuenta que el servicio de ejecución no diferencia stdout y stderr, por lo que todo lo que se lea del socket puede provenir de cualquiera de las salidas y estar intercalado.

ddlmib renuncia a la propiedad del SocketChannel devuelto y se debe cerrar explícitamente después de su uso.

Parámetros
device IDevice: Es el dispositivo al que se conectará. Puede ser nulo, en cuyo caso la conexión se realizará al primer dispositivo disponible.

executable String: Es la ruta de acceso absoluta del ejecutable que se ejecutará.

parameters String: Son los parámetros que se obtienen cuando se ejecuta el ejecutable.

Muestra
SocketChannel

Arroja
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

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

Lee la respuesta de ADB después de un comando.

Parámetros
chan SocketChannel: Es el canal de socket que está conectado a adb.

readDiagString boolean: Si es verdadero, esperamos que una respuesta OKAY esté seguida de una cadena de diagnóstico. De lo contrario, solo esperamos que la cadena de diagnóstico siga un error.

Muestra
AdbHelper.AdbResponse

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
en caso de error de E/S en la conexión

reiniciar

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

Reinicia el dispositivo.

Parámetros
into String: Indica a qué modo se reiniciará (recuperación o cargador de arranque). O bien, un valor nulo para solo reiniciar.

adbSockAddr InetSocketAddress

device IDevice

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

removeForward

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

Quita un reenvío de puertos entre un puerto local y uno remoto.

Parámetros
adbSockAddr InetSocketAddress: Es la dirección de socket a la que se conectará adb.

device IDevice: Es el dispositivo en el que se quitará el reenvío de puertos.

localPortSpec String: Especificación del puerto local que se redireccionó, debe tener el formato tcp:

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

removeReverse

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

Quita la inversión de un puerto entre un puerto remoto y uno local.

Parámetros
adbSockAddr InetSocketAddress: Es la dirección de socket a la que se conectará adb.

device IDevice: Es el dispositivo en el que se quitará la inversión de puertos.

remotePortSpec String: Especificación del puerto remoto al que se revierte, uno de los siguientes: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

root

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

Solicita al daemon de adb que se convierta en raíz en el dispositivo. Es posible que esta operación falle de forma silenciosa y solo se complete correctamente en compilaciones para desarrolladores. Consulta "adb root" para obtener más información. Si necesitas saber si se realizó correctamente, puedes verificar el resultado de executeRemoteCommand en "echo \$USER_ID". Si es 0, significa que adbd se está ejecutando como administrador.

Parámetros
adbSockAddr InetSocketAddress

device IDevice

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

Dado un IDevice, toma el número de serie y dile a adb que se comunique con ese dispositivo.

Parámetros
adbChan SocketChannel: Es la conexión de socket a adb.

device IDevice: Es el dispositivo con el que hablarás.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

Le indica a adb que se comunique con un dispositivo específico

Parámetros
adbChan SocketChannel: La conexión de socket a adb

deviceSerialNumber String: Es el número de serie del dispositivo con el que se comunicará. Si es nulo, se selecciona el dispositivo predeterminado que elige adb.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
AdbCommandRejectedException Si adb rechaza el comando
en caso de error de E/S en la conexión

a escribir

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

Escribe hasta que se escriban todos los datos en "data", se alcance la longitud opcional, venza el tiempo de espera o falle la conexión. Devuelve "true" si se escribieron todos los datos.

Parámetros
chan SocketChannel: Es el socket abierto en el que se escribirá.

data byte: Es el búfer que se enviará.

length int: Es la longitud que se escribirá o -1 para enviar todo el búfer.

timeout int: Es el valor de tiempo de espera. Un tiempo de espera de cero significa "esperar para siempre".

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
en caso de error de E/S en la conexión

a escribir

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

Escribe hasta que se escriban todos los datos en "data" o hasta que falle o se agote el tiempo de espera de la conexión.

Esto usa el valor de tiempo de espera predeterminado.

Parámetros
chan SocketChannel: Es el socket abierto en el que se escribirá.

data byte: Es el búfer que se enviará.

Arroja
TimeoutException en caso de que se agote el tiempo de espera de la conexión.
en caso de error de E/S en la conexión