AdbHelper
public
final
class
AdbHelper
extends Object
| java.lang.Object
|
| ↳ |
com.android.tradefed.device.server.AdbHelper
|
Clase auxiliar 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 redirección 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, 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
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
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 admitidas 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)
Pídele al daemon de adb que se convierta en raíz en el dispositivo.
|
static
void
|
setDevice(SocketChannel adbChan, String deviceSerialNumber)
Le indica a adb que se comunique con un dispositivo específico
|
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
|
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 redirección 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: |
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 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 el resultado del comando. 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 el resultado del comando y nunca arrojará una excepción. |
maxTimeUnits |
TimeUnit: Unidades para los valores maxTimeout y maxTimeToOutputResponse distintos de cero. |
is |
InputStream: Es un 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 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 para que se muestre el comando. Un valor de 0 significa que no se aplicará un tiempo de espera máximo. |
maxTimeToOutputResponse |
long: Es el tiempo máximo entre el resultado del comando. 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 el resultado del comando y nunca arrojará una excepción. |
maxTimeUnits |
TimeUnit: Unidades para los valores maxTimeout y maxTimeToOutputResponse distintos de cero. |
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 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 el resultado del comando. 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 el resultado del comando y nunca arrojará una excepción. |
maxTimeUnits |
TimeUnit: Son las unidades para los valores de maxTimeToOutputResponse distintos de cero. |
public static byte[] formAdbRequest (String payloadString)
Crea una cadena ASCII precedida por cuatro dígitos hexadecimales. El "####" inicial es la longitud del resto de la cadena, codificada como hexadecimal ASCII (no importa el uso de 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 admitidas 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 será con el primer dispositivo disponible. |
devicePort |
int: El puerto que abriremos |
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 será con el primer dispositivo disponible. |
command |
String: Es 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 será con el 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 al ejecutar 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 FAIL. |
| Arroja |
TimeoutException |
en caso de que se agote el tiempo de espera de la conexión. |
IOException |
en caso de error de E/S en la conexión |
reboot
public static void reboot (String into,
InetSocketAddress adbSockAddr,
IDevice device)
Reinicia el dispositivo.
| Parámetros |
into |
String: Indica a qué modo se reiniciará el dispositivo (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 reenvío, 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) |
raíz
public static void root (InetSocketAddress adbSockAddr,
IDevice device)
Pídele al daemon de adb que se convierta en raíz en el dispositivo. Esta operación puede fallar de forma silenciosa y solo puede tener éxito 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 raíz.
| Parámetros |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
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. |
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 se hablará. |
write
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. |
IOException |
en caso de error de E/S en la conexión |
write
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. |
IOException |
en caso de error de E/S en la conexión |