AdbHelper

public final class AdbHelper
extends Object

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


Classe helper per gestire le richieste e le connessioni ad ADB.

AndroidDebugBridge è l'API pubblica per la connessione ad ADB, mentre AdbHelper si occupa delle operazioni di basso livello.

Attualmente utilizza I/O non bloccanti di spin-wait. Un selettore sarebbe più efficiente, ma sembra eccessivo per quello che stiamo facendo qui.

Riepilogo

Classi nidificate

class AdbHelper.AdbResponse

Risposta da ADB. 

Costanti

String HOST_TRANSPORT

Campi

public static final Charset DEFAULT_CHARSET

Metodi pubblici

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

Crea un port forwarding tra una porta locale e una remota.

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

Crea una richiesta di port forwarding a un processo jdwp.

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

Crea e connette un nuovo socket pass-through dall'host a una porta del dispositivo.

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

Crea un'inversione di porta tra una porta remota e una locale.

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

Esegue un comando della shell sul dispositivo e recupera l'output.

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

Esegue un comando remoto sul dispositivo e recupera l'output.

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

Esegue un comando della shell sul dispositivo e recupera l'output.

static byte[] formAdbRequest(String payloadString)

Crea una stringa ASCII preceduta da quattro cifre esadecimali.

static String getFeatures(IDevice device)

Esegue query su un insieme di funzionalità supportate dal dispositivo.

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

Recupera il frame buffer dal dispositivo con il timeout specificato.

static String getHostFeatures()

Esegue query su un insieme di funzionalità supportate dall'host ADB.

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

Crea e connetti un nuovo socket pass-through dall'host a una porta del dispositivo.

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

Richiamare il servizio su un dispositivo remoto.

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

Richiama il servizio host:exec su un dispositivo remoto.

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

Legge la risposta di ADB dopo un comando.

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

riavvia il dispositivo.

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

Rimuovi un port forwarding tra una porta locale e una porta remota.

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

Rimuovi un'inversione di porta tra una porta remota e una locale.

static void root(InetSocketAddress adbSockAddr, IDevice device)

Chiedi al demone adb di diventare root sul dispositivo.

static void setDevice(SocketChannel adbChan, IDevice device)

Dato un IDevice, recupera il numero di serie e indica ad ADB di comunicare con quel dispositivo.

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

indica ad adb di comunicare con un dispositivo specifico

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

Scrivi fino a quando tutti i dati in "data" non vengono scritti, la lunghezza facoltativa non viene raggiunta, il timeout scade o la connessione non riesce.

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

Scrivi finché tutti i dati in "data" non vengono scritti o la connessione non va a buon fine o scade.

Costanti

HOST_TRANSPORT

public static final String HOST_TRANSPORT

Valore costante: "host:transport:"

Campi

DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET

Metodi pubblici

createForward

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

Crea un port forwarding tra una porta locale e una remota.

Parametri
adbSockAddr InetSocketAddress: l'indirizzo socket a cui connettersi ad ADB

device IDevice: il dispositivo su cui eseguire il port forwarding

localPortSpec String: specifica della porta locale da inoltrare, deve essere nel formato tcp:

remotePortSpec String: specifica della porta remota a cui inoltrare, uno dei seguenti valori: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Parametri
message String

errorDuringDeviceSelection boolean

Ritorni
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

Parametri
message String

Ritorni
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

Crea una richiesta di port forwarding a un processo jdwp. Viene restituito un array contenente "####jwdp:{pid}".

Parametri
pid int: il PID del processo jdwp sul dispositivo.

Ritorni
byte[]

createPassThroughConnection

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

Crea e connette un nuovo socket pass-through dall'host a una porta del dispositivo.

Parametri
deviceSerialNumber String: il numero di serie del dispositivo a cui connettersi. Può essere nullo o vuoto, nel qual caso la connessione avverrà al primo dispositivo disponibile.

pid int: il PID del processo a cui connettersi.

Ritorni
SocketChannel

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

createReverse

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

Crea un'inversione di porta tra una porta remota e una locale.

Parametri
adbSockAddr InetSocketAddress: l'indirizzo socket a cui connettersi ad ADB

device IDevice: il dispositivo su cui eseguire l'inversione della porta

remotePortSpec String: specifica della porta remota a cui eseguire l'inversione, uno dei seguenti valori: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

localPortSpec String: specifica della porta locale, deve essere nel formato tcp:

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

executeRemoteCommand

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

Esegue un comando della shell sul dispositivo e recupera l'output. L'output viene consegnato a rcvr appena arriva.

Parametri
adbSockAddr InetSocketAddress: il ERROR(/InetSocketAddress) adb.

command String: il comando shell da eseguire

device IDevice: il IDevice su cui eseguire il comando.

rcvr IShellOutputReceiver: il IShellOutputReceiver che riceverà l'output del comando shell

maxTimeToOutputResponse long: il tempo massimo tra l'output del comando. Se trascorre più tempo tra l'output del comando, il metodo genererà ShellCommandUnresponsiveException. Un valore di 0 indica che il metodo attenderà per sempre l'output del comando e non genererà mai un errore.

maxTimeUnits TimeUnit: unità per i valori maxTimeToOutputResponse diversi da zero.

Lanci
TimeoutException in caso di timeout della connessione durante l'invio del comando.
AdbCommandRejectedException se adb rifiuta il comando
ShellCommandUnresponsiveException nel caso in cui il comando shell non invii alcun output per un periodo superiore a maxTimeToOutputResponse.
in caso di errore I/O sulla connessione.

executeRemoteCommand

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

Esegue un comando remoto sul dispositivo e recupera l'output. L'output viene consegnato a rcvr appena arriva. Il comando viene eseguito dal servizio remoto identificato dal parametro adbService.

Parametri
adbSockAddr InetSocketAddress: il ERROR(/InetSocketAddress) adb.

adbService AdbHelper.AdbService: il AdbHelper.AdbService da utilizzare per eseguire il comando.

command String: il comando shell da eseguire

device IDevice: il IDevice su cui eseguire il comando.

rcvr IShellOutputReceiver: il IShellOutputReceiver che riceverà l'output del comando shell

maxTimeout long: timeout massimo per l'esecuzione dell'intero comando. Un valore pari a 0 indica nessun timeout.

maxTimeToOutputResponse long: il tempo massimo tra l'output del comando. Se trascorre più tempo tra l'output del comando, il metodo genererà ShellCommandUnresponsiveException. Un valore di 0 indica che il metodo attenderà per sempre l'output del comando e non genererà mai un errore.

maxTimeUnits TimeUnit: unità per i valori non nulli di maxTimeout e maxTimeToOutputResponse.

is InputStream: un ERROR(/InputStream) facoltativo da trasmettere dopo aver richiamato il comando e prima di recuperare la risposta.

Lanci
TimeoutException in caso di timeout della connessione durante l'invio del comando.
AdbCommandRejectedException se adb rifiuta il comando
ShellCommandUnresponsiveException nel caso in cui il comando shell non invii alcun output per un periodo superiore a maxTimeToOutputResponse.
in caso di errore I/O sulla connessione.

executeRemoteCommand

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

Esegue un comando della shell sul dispositivo e recupera l'output. L'output viene consegnato a rcvr appena arriva.

Parametri
adbSockAddr InetSocketAddress: il ERROR(/InetSocketAddress) adb.

command String: il comando shell da eseguire

device IDevice: il IDevice su cui eseguire il comando.

rcvr IShellOutputReceiver: il IShellOutputReceiver che riceverà l'output del comando shell

maxTimeout long: il tempo massimo per la restituzione del comando. Un valore pari a 0 indica che non verrà applicato alcun timeout massimo.

maxTimeToOutputResponse long: il tempo massimo tra l'output del comando. Se trascorre più tempo tra l'output del comando, il metodo genererà ShellCommandUnresponsiveException. Un valore di 0 indica che il metodo attenderà per sempre l'output del comando e non genererà mai un errore.

maxTimeUnits TimeUnit: unità per i valori non nulli di maxTimeout e maxTimeToOutputResponse.

Lanci
TimeoutException in caso di timeout della connessione durante l'invio del comando.
AdbCommandRejectedException se adb rifiuta il comando
ShellCommandUnresponsiveException nel caso in cui il comando shell non invii alcun output per un periodo superiore a maxTimeToOutputResponse.
in caso di errore I/O sulla connessione.

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

Crea una stringa ASCII preceduta da quattro cifre esadecimali. L'apertura "####" indica la lunghezza del resto della stringa, codificata come esadecimale ASCII (la distinzione tra maiuscole e minuscole non è importante).

Parametri
payloadString String

Ritorni
byte[]

getFeatures

public static String getFeatures (IDevice device)

Esegue query su un insieme di funzionalità supportate dal dispositivo.

Parametri
device IDevice: il dispositivo su cui eseguire il port forwarding

Ritorni
String

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

getFrameBuffer

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

Recupera il frame buffer dal dispositivo con il timeout specificato. Un timeout di 0 indica che attenderà per sempre.

Parametri
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Ritorni
RawImage

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

getHostFeatures

public static String getHostFeatures ()

Esegue query su un insieme di funzionalità supportate dall'host ADB.

Ritorni
String

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

apri

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

Crea e connetti un nuovo socket pass-through dall'host a una porta del dispositivo.

Parametri
device IDevice: il dispositivo a cui connettersi. Può essere null, nel qual caso la connessione avverrà al primo dispositivo disponibile.

devicePort int: la porta che stiamo aprendo

Ritorni
SocketChannel

Lanci
TimeoutException in caso di timeout della connessione.
in caso di errore I/O sulla connessione.
AdbCommandRejectedException se adb rifiuta il comando

rawAdbService

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

Richiamare il servizio su un dispositivo remoto. Restituisce un canale socket connesso al processo di esecuzione.

ddlmib rinuncia alla proprietà di SocketChannel restituito e deve essere chiuso esplicitamente dopo l'uso.

Parametri
device IDevice: il dispositivo a cui connettersi. Può essere null, nel qual caso la connessione avverrà al primo dispositivo disponibile.

command String: il comando da eseguire

service AdbHelper.AdbService: il AdbHelper.AdbService da utilizzare per eseguire il comando.

Ritorni
SocketChannel

Lanci
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

rawExec

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

Richiama il servizio host:exec su un dispositivo remoto. Restituisce un canale socket connesso al processo di esecuzione. Tieni presente che il servizio exec non distingue stdout e stderr, quindi ciò che viene letto dal socket può provenire da entrambi gli output ed essere intercalato.

ddlmib rinuncia alla proprietà di SocketChannel restituito e deve essere chiuso esplicitamente dopo l'uso.

Parametri
device IDevice: il dispositivo a cui connettersi. Può essere null, nel qual caso la connessione avverrà al primo dispositivo disponibile.

executable String: il percorso assoluto dell'eseguibile da eseguire

parameters String: i parametri da ottenere durante l'esecuzione dell'eseguibile

Ritorni
SocketChannel

Lanci
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

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

Legge la risposta di ADB dopo un comando.

Parametri
chan SocketChannel: Il canale socket connesso ad ADB.

readDiagString boolean: Se è true, ci aspettiamo che alla risposta OKAY segua una stringa di diagnostica. In caso contrario, ci aspettiamo che la stringa di diagnostica segua un errore.

Ritorni
AdbHelper.AdbResponse

Lanci
TimeoutException in caso di timeout della connessione.
in caso di errore I/O sulla connessione.

fai ripartire

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

riavvia il dispositivo.

Parametri
into String: in cosa riavviare (recovery, bootloader). oppure null per riavviare.

adbSockAddr InetSocketAddress

device IDevice

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

removeForward

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

Rimuovi un port forwarding tra una porta locale e una remota.

Parametri
adbSockAddr InetSocketAddress: l'indirizzo socket a cui connettersi ad ADB

device IDevice: il dispositivo su cui rimuovere il port forwarding

localPortSpec String: specifica della porta locale inoltrata, deve essere nel formato tcp:

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

removeReverse

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

Rimuovi un'inversione di porta tra una porta remota e una locale.

Parametri
adbSockAddr InetSocketAddress: l'indirizzo socket a cui connettersi ad ADB

device IDevice: il dispositivo su cui rimuovere l'inversione della porta

remotePortSpec String: specifica della porta remota invertita in uno dei seguenti valori: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (solo remoto)

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

root

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

Chiedi al demone adb di diventare root sul dispositivo. Questa operazione potrebbe non riuscire in modo invisibile e può avere esito positivo solo nelle build per sviluppatori. Per ulteriori informazioni, vedi "adb root". Se devi sapere se l'operazione è riuscita, puoi controllare il risultato di executeRemoteCommand su "echo \$USER_ID". Se è 0, adbd è in esecuzione come root.

Parametri
adbSockAddr InetSocketAddress

device IDevice

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

Dato un IDevice, recupera il numero di serie e indica ad ADB di comunicare con quel dispositivo.

Parametri
adbChan SocketChannel: la connessione socket ad ADB.

device IDevice: il dispositivo con cui parlare.

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

indica ad adb di comunicare con un dispositivo specifico

Parametri
adbChan SocketChannel: la connessione socket ad ADB

deviceSerialNumber String: il numero di serie del dispositivo con cui comunicare. Se è null, il dispositivo predefinito selezionato è quello scelto da adb.

Lanci
TimeoutException in caso di timeout della connessione.
AdbCommandRejectedException se adb rifiuta il comando
in caso di errore I/O sulla connessione.

scrivere

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

Scrivi fino a quando non vengono scritti tutti i dati in "data", viene raggiunta la lunghezza facoltativa, il timeout scade o la connessione non riesce. Restituisce "true" se tutti i dati sono stati scritti.

Parametri
chan SocketChannel: il socket aperto in cui scrivere.

data byte: il buffer da inviare.

length int: la lunghezza da scrivere o -1 per inviare l'intero buffer.

timeout int: il valore di timeout. Un timeout pari a zero significa "attendi per sempre".

Lanci
TimeoutException in caso di timeout della connessione.
in caso di errore I/O sulla connessione.

scrivere

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

Scrivi finché tutti i dati in "data" non vengono scritti o la connessione non va a buon fine o scade.

Viene utilizzato il valore di timeout predefinito.

Parametri
chan SocketChannel: il socket aperto in cui scrivere.

data byte: il buffer da inviare.

Lanci
TimeoutException in caso di timeout della connessione.
in caso di errore I/O sulla connessione.