AdbHelper

public final class AdbHelper
extends Object

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


Classe d'assistance pour gérer les requêtes et les connexions à adb.

AndroidDebugBridge est l'API publique permettant de se connecter à adb, tandis que AdbHelper effectue les opérations de bas niveau.

Il utilise actuellement des E/S non bloquantes avec spin-wait. Un sélecteur serait plus efficace, mais semble excessif pour ce que nous faisons ici.

Résumé

Classes imbriquées

class AdbHelper.AdbResponse

Réponse de l'ADB. 

Constantes

String HOST_TRANSPORT

Champs

public static final Charset DEFAULT_CHARSET

Méthodes publiques

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

Crée un transfert de port entre un port local et un port distant.

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

Crée une demande de transfert de port vers un processus JDWP.

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

Crée et connecte un nouveau socket direct, de l'hôte à un port de l'appareil.

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

Crée une inversion de port entre un port distant et un port local.

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

Exécute une commande shell sur l'appareil et récupère le résultat.

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

Exécute une commande à distance sur l'appareil et récupère le résultat.

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

Exécute une commande shell sur l'appareil et récupère le résultat.

static byte[] formAdbRequest(String payloadString)

Créez une chaîne ASCII précédée de quatre chiffres hexadécimaux.

static String getFeatures(IDevice device)

Interroge un ensemble de fonctionnalités compatibles de l'appareil.

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

Récupère le tampon de frame de l'appareil avec le délai d'attente spécifié.

static String getHostFeatures()

Interroge un ensemble de fonctionnalités compatibles à partir de l'hôte ADB.

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

Créez et connectez un nouveau socket direct, de l'hôte à un port de l'appareil.

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

Appelez le service sur un appareil distant.

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

Appelez le service host:exec sur un appareil distant.

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

Lit la réponse d'ADB après une commande.

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

Redémarrez l'appareil.

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

Supprimez un transfert de port entre un port local et un port distant.

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

Supprimez l'inversion de port entre un port distant et un port local.

static void root(InetSocketAddress adbSockAddr, IDevice device)

Demandez au démon adb de devenir root sur l'appareil.

static void setDevice(SocketChannel adbChan, IDevice device)

Étant donné un IDevice, récupérez le numéro de série et demandez à adb de communiquer avec cet appareil.

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

indique à adb de communiquer avec un appareil spécifique.

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

Écrivez jusqu'à ce que toutes les données de "data" soient écrites, que la longueur facultative soit atteinte, que le délai expire ou que la connexion échoue.

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

Écrit jusqu'à ce que toutes les données de "data" soient écrites, ou que la connexion échoue ou expire.

Constantes

HOST_TRANSPORT

public static final String HOST_TRANSPORT

Valeur constante : "host:transport:"

Champs

DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET

Méthodes publiques

createForward

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

Crée un transfert de port entre un port local et un port distant.

Paramètres
adbSockAddr InetSocketAddress : adresse du socket pour se connecter à adb

device IDevice : appareil sur lequel effectuer la redirection de port

localPortSpec String : spécification du port local à transférer, au format tcp:

remotePortSpec String : spécification du port distant vers lequel transférer, l'un des suivants : tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (distant uniquement)

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

Paramètres
message String

errorDuringDeviceSelection boolean

Renvoie
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

Paramètres
message String

Renvoie
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

Crée une demande de transfert de port vers un processus JDWP. Cela renvoie un tableau contenant "####jwdp:{pid}".

Paramètres
pid int : PID du processus jdwp sur l'appareil.

Renvoie
byte[]

createPassThroughConnection

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

Crée et connecte un nouveau socket direct, de l'hôte à un port de l'appareil.

Paramètres
deviceSerialNumber String : numéro de série de l'appareil auquel se connecter. Peut être nul ou vide, auquel cas la connexion se fera au premier appareil disponible.

pid int : PID du processus auquel se connecter.

Renvoie
SocketChannel

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

createReverse

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

Crée une inversion de port entre un port distant et un port local.

Paramètres
adbSockAddr InetSocketAddress : adresse du socket pour se connecter à adb

device IDevice : appareil sur lequel inverser les ports

remotePortSpec String : spécification du port distant à inverser, l'un des suivants : tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (distant uniquement)

localPortSpec String : spécification du port local, doit être au format tcp:

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

executeRemoteCommand

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

Exécute une commande shell sur l'appareil et récupère le résultat. Le résultat est transmis à rcvr dès qu'il est disponible.

Paramètres
adbSockAddr InetSocketAddress : ERROR(/InetSocketAddress) à adb.

command String : commande shell à exécuter

device IDevice : IDevice sur lequel exécuter la commande.

rcvr IShellOutputReceiver : IShellOutputReceiver qui recevra la sortie de la commande shell

maxTimeToOutputResponse long : durée maximale entre les sorties de commandes. Si plus de temps s'écoule entre les sorties de commande, la méthode génère ShellCommandUnresponsiveException. Une valeur de 0 signifie que la méthode attendra indéfiniment la sortie de la commande et ne générera jamais d'exception.

maxTimeUnits TimeUnit : unités pour les valeurs maxTimeToOutputResponse non nulles.

Génère
TimeoutException en cas de délai d'expiration de la connexion lors de l'envoi de la commande.
AdbCommandRejectedException si adb rejette la commande.
ShellCommandUnresponsiveException si la commande shell n'envoie aucune sortie pendant une période supérieure à maxTimeToOutputResponse.
en cas d'erreur d'E/S sur la connexion.

executeRemoteCommand

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

Exécute une commande à distance sur l'appareil et récupère le résultat. Le résultat est transmis à rcvr dès qu'il est disponible. La commande est exécutée par le service à distance identifié par le paramètre adbService.

Paramètres
adbSockAddr InetSocketAddress : ERROR(/InetSocketAddress) à adb.

adbService AdbHelper.AdbService : AdbHelper.AdbService à utiliser pour exécuter la commande.

command String : commande shell à exécuter

device IDevice : IDevice sur lequel exécuter la commande.

rcvr IShellOutputReceiver : IShellOutputReceiver qui recevra la sortie de la commande shell

maxTimeout long : délai avant expiration maximal pour l'exécution de la commande complète. Une valeur de 0 signifie qu'il n'y a pas de délai d'expiration.

maxTimeToOutputResponse long : durée maximale entre les sorties de commandes. Si plus de temps s'écoule entre les sorties de commande, la méthode génère ShellCommandUnresponsiveException. Une valeur de 0 signifie que la méthode attendra indéfiniment la sortie de la commande et ne générera jamais d'exception.

maxTimeUnits TimeUnit : unités pour les valeurs non nulles maxTimeout et maxTimeToOutputResponse.

is InputStream : ERROR(/InputStream) facultatif à diffuser après l'appel de la commande et avant la récupération de la réponse.

Génère
TimeoutException en cas de délai d'expiration de la connexion lors de l'envoi de la commande.
AdbCommandRejectedException si adb rejette la commande.
ShellCommandUnresponsiveException si la commande shell n'envoie aucune sortie pendant une période supérieure à maxTimeToOutputResponse.
en cas d'erreur d'E/S sur la connexion.

executeRemoteCommand

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

Exécute une commande shell sur l'appareil et récupère le résultat. Le résultat est transmis à rcvr dès qu'il est disponible.

Paramètres
adbSockAddr InetSocketAddress : ERROR(/InetSocketAddress) à adb.

command String : commande shell à exécuter

device IDevice : IDevice sur lequel exécuter la commande.

rcvr IShellOutputReceiver : IShellOutputReceiver qui recevra la sortie de la commande shell

maxTimeout long : durée maximale avant que la commande ne renvoie un résultat. Une valeur de 0 signifie qu'aucun délai maximal ne sera appliqué.

maxTimeToOutputResponse long : durée maximale entre les sorties de commandes. Si plus de temps s'écoule entre les sorties de commande, la méthode génère ShellCommandUnresponsiveException. Une valeur de 0 signifie que la méthode attendra indéfiniment la sortie de la commande et ne générera jamais d'exception.

maxTimeUnits TimeUnit : unités pour les valeurs non nulles maxTimeout et maxTimeToOutputResponse.

Génère
TimeoutException en cas de délai d'expiration de la connexion lors de l'envoi de la commande.
AdbCommandRejectedException si adb rejette la commande.
ShellCommandUnresponsiveException si la commande shell n'envoie aucune sortie pendant une période supérieure à maxTimeToOutputResponse.
en cas d'erreur d'E/S sur la connexion.

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

Créez une chaîne ASCII précédée de quatre chiffres hexadécimaux. Les quatre premiers caractères "####" correspondent à la longueur du reste de la chaîne, encodée en hexadécimal ASCII (la casse n'a pas d'importance).

Paramètres
payloadString String

Renvoie
byte[]

getFeatures

public static String getFeatures (IDevice device)

Interroge un ensemble de fonctionnalités compatibles de l'appareil.

Paramètres
device IDevice : appareil sur lequel effectuer la redirection de port

Renvoie
String

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

getFrameBuffer

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

Récupère le tampon de frame de l'appareil avec le délai d'attente spécifié. Un délai d'expiration de 0 indique qu'il attendra indéfiniment.

Paramètres
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

Renvoie
RawImage

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

getHostFeatures

public static String getHostFeatures ()

Interroge un ensemble de fonctionnalités compatibles à partir de l'hôte ADB.

Renvoie
String

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

développer

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

Créez et connectez un nouveau socket direct, de l'hôte à un port de l'appareil.

Paramètres
device IDevice : appareil auquel se connecter. Peut être nul, auquel cas la connexion se fera au premier appareil disponible.

devicePort int : port que nous ouvrons.

Renvoie
SocketChannel

Génère
TimeoutException en cas de délai d'expiration de la connexion.
en cas d'erreur d'E/S sur la connexion.
AdbCommandRejectedException si adb rejette la commande.

rawAdbService

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

Appelez le service sur un appareil distant. Renvoie un canal de socket connecté au processus d'exécution.

ddlmib renonce à la propriété du SocketChannel renvoyé et doit être explicitement fermé après utilisation.

Paramètres
device IDevice : appareil auquel se connecter. Peut être nul, auquel cas la connexion se fera au premier appareil disponible.

command String : commande à exécuter

service AdbHelper.AdbService : AdbHelper.AdbService à utiliser pour exécuter la commande.

Renvoie
SocketChannel

Génère
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

rawExec

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

Appelez le service host:exec sur un appareil distant. Renvoie un canal de socket connecté au processus d'exécution. Notez que le service d'exécution ne fait pas la différence entre stdout et stderr. Par conséquent, tout ce qui est lu à partir du socket peut provenir de l'une ou l'autre des sorties et être entrelacé.

ddlmib renonce à la propriété du SocketChannel renvoyé et doit être explicitement fermé après utilisation.

Paramètres
device IDevice : appareil auquel se connecter. Peut être nul, auquel cas la connexion se fera au premier appareil disponible.

executable String : chemin absolu de l'exécutable à exécuter

parameters String : paramètres à obtenir lors de l'exécution de l'exécutable

Renvoie
SocketChannel

Génère
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

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

Lit la réponse d'ADB après une commande.

Paramètres
chan SocketChannel : canal de socket connecté à adb.

readDiagString boolean : si la valeur est "true", nous attendons une réponse "OK" suivie d'une chaîne de diagnostic. Sinon, nous nous attendons à ce que la chaîne de diagnostic suive uniquement un échec.

Renvoie
AdbHelper.AdbResponse

Génère
TimeoutException en cas de délai d'expiration de la connexion.
en cas d'erreur d'E/S sur la connexion.

redémarrer

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

Redémarrez l'appareil.

Paramètres
into String : mode de redémarrage (récupération, bootloader). ou "null" pour simplement redémarrer.

adbSockAddr InetSocketAddress

device IDevice

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

removeForward

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

Supprimez un transfert de port entre un port local et un port distant.

Paramètres
adbSockAddr InetSocketAddress : adresse du socket pour se connecter à adb

device IDevice : appareil sur lequel supprimer la redirection de port

localPortSpec String : spécification du port local qui a été transféré, doit être au format tcp:

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

removeReverse

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

Supprimez l'inversion de port entre un port distant et un port local.

Paramètres
adbSockAddr InetSocketAddress : adresse du socket pour se connecter à adb

device IDevice : appareil sur lequel supprimer l'inversion de port

remotePortSpec String : spécification du port distant inversé, l'un des suivants : tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (remote only)

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

racine

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

Demandez au démon adb de devenir root sur l'appareil. Cette opération peut échouer silencieusement et ne peut réussir que sur les versions pour les développeurs. Pour en savoir plus, consultez "adb root". Si vous avez besoin de savoir si l'opération a réussi, vous pouvez vérifier le résultat de executeRemoteCommand sur "echo \$USER_ID". Si la valeur est 0, cela signifie qu'adbd s'exécute en tant que root.

Paramètres
adbSockAddr InetSocketAddress

device IDevice

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

Étant donné un IDevice, récupérez le numéro de série et demandez à adb de communiquer avec cet appareil.

Paramètres
adbChan SocketChannel : connexion du socket à adb.

device IDevice : appareil auquel parler.

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

indique à adb de communiquer avec un appareil spécifique.

Paramètres
adbChan SocketChannel : connexion socket à adb

deviceSerialNumber String : numéro de série de l'appareil avec lequel communiquer. Si la valeur est "null", l'appareil par défaut sélectionné est celui choisi par adb.

Génère
TimeoutException en cas de délai d'expiration de la connexion.
AdbCommandRejectedException si adb rejette la commande.
en cas d'erreur d'E/S sur la connexion.

à écrire

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

Écrivez jusqu'à ce que toutes les données de "data" soient écrites, que la longueur facultative soit atteinte, que le délai expire ou que la connexion échoue. Renvoie "true" si toutes les données ont été écrites.

Paramètres
chan SocketChannel : socket ouvert dans lequel écrire.

data byte : tampon à envoyer.

length int : longueur à écrire ou -1 pour envoyer l'intégralité du tampon.

timeout int : valeur du délai d'inactivité. Un délai avant expiration de zéro signifie "attendre indéfiniment".

Génère
TimeoutException en cas de délai d'expiration de la connexion.
en cas d'erreur d'E/S sur la connexion.

à écrire

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

Écrit jusqu'à ce que toutes les données de "data" soient écrites, ou que la connexion échoue ou expire.

Cette option utilise la valeur de délai avant expiration par défaut.

Paramètres
chan SocketChannel : socket ouvert dans lequel écrire.

data byte : tampon à envoyer.

Génère
TimeoutException en cas de délai d'expiration de la connexion.
en cas d'erreur d'E/S sur la connexion.