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
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) |
createHiddenException
public static AdbCommandRejectedException createHiddenException (String message,
boolean errorDuringDeviceSelection)
| Parámetros |
message |
String |
errorDuringDeviceSelection |
boolean |
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. |
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á. |
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: |
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. |
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. |
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. |
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 |
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. |
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 |
getHostFeatures
public static String getHostFeatures ()
Consulta un conjunto de funciones compatibles desde el host de ADB.
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. |
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. |
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. |
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. |
| 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 |
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: |
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) |
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 |
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. |
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. |
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 |