AdbHelper
public
final
class
AdbHelper
extends Object
| java.lang.Object
|
| ↳ |
com.android.tradefed.device.server.AdbHelper
|
Hilfsklasse zum Verarbeiten von Anfragen und Verbindungen zu adb.
AndroidDebugBridge ist die öffentliche API für die Verbindung zu adb, während AdbHelper die Low-Level-Aufgaben übernimmt.
Dabei wird derzeit Spin-Wait-I/O ohne Blockierung verwendet. Ein Selektor wäre effizienter, scheint aber für das, was wir hier tun, übertrieben.
Zusammenfassung
Öffentliche Methoden |
static
void
|
createForward(InetSocketAddress adbSockAddr, IDevice device, String localPortSpec, String remotePortSpec)
Erstellt eine Portweiterleitung zwischen einem lokalen und einem Remote-Port.
|
static
AdbCommandRejectedException
|
createHiddenException(String message, boolean errorDuringDeviceSelection)
|
static
AdbCommandRejectedException
|
createHiddenException(String message)
|
static
byte[]
|
createJdwpForwardRequest(int pid)
Erstellt eine Portweiterleitungsanfrage an einen jdwp-Prozess.
|
static
SocketChannel
|
createPassThroughConnection(InetSocketAddress adbSockAddr, String deviceSerialNumber, int pid)
Erstellt und verbindet einen neuen Pass-Through-Socket vom Host zu einem Port auf dem Gerät.
|
static
void
|
createReverse(InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec, String localPortSpec)
Erstellt eine Portumkehrung zwischen einem Remote- und einem lokalen Port.
|
static
void
|
executeRemoteCommand(InetSocketAddress adbSockAddr, AdbHelper.AdbService adbService, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits, InputStream is)
Führt einen Remote-Befehl auf dem Gerät aus und ruft die Ausgabe ab.
|
static
void
|
executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeout, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)
Führt einen Shell-Befehl auf dem Gerät aus und ruft die Ausgabe ab.
|
static
void
|
executeRemoteCommand(InetSocketAddress adbSockAddr, String command, IDevice device, IShellOutputReceiver rcvr, long maxTimeToOutputResponse, TimeUnit maxTimeUnits)
Führt einen Shell-Befehl auf dem Gerät aus und ruft die Ausgabe ab.
|
static
byte[]
|
formAdbRequest(String payloadString)
Erstellt einen ASCII-String, dem vier Hexadezimalziffern vorangestellt sind.
|
static
String
|
getFeatures(IDevice device)
Fragt eine Reihe unterstützter Funktionen vom Gerät ab.
|
static
RawImage
|
getFrameBuffer(InetSocketAddress adbSockAddr, IDevice device, long timeout, TimeUnit unit)
Ruft den Framebuffer vom Gerät mit dem angegebenen Zeitlimit ab.
|
static
String
|
getHostFeatures()
Fragt eine Reihe unterstützter Funktionen vom ADB-Host ab.
|
static
SocketChannel
|
open(InetSocketAddress adbSockAddr, IDevice device, int devicePort)
Erstellen Sie eine neue Pass-Through-Socket-Verbindung vom Host zu einem Port auf dem Gerät.
|
static
SocketChannel
|
rawAdbService(InetSocketAddress socketAddress, IDevice device, String command, AdbHelper.AdbService service)
Rufen Sie den Dienst auf einem Remote-Gerät auf.
|
static
SocketChannel
|
rawExec(InetSocketAddress socketAddress, IDevice device, String executable, String[] parameters)
Rufen Sie den Dienst „host:exec“ auf einem Remote-Gerät auf.
|
static
AdbHelper.AdbResponse
|
readAdbResponse(SocketChannel chan, boolean readDiagString)
Liest die Antwort von ADB nach einem Befehl.
|
static
void
|
reboot(String into, InetSocketAddress adbSockAddr, IDevice device)
Starte das Gerät neu.
|
static
void
|
removeForward(InetSocketAddress adbSockAddr, IDevice device, String localPortSpec)
Entfernen Sie eine Portweiterleitung zwischen einem lokalen und einem Remote-Port.
|
static
void
|
removeReverse(InetSocketAddress adbSockAddr, IDevice device, String remotePortSpec)
Entfernen Sie eine Portumkehrung zwischen einem Remote- und einem lokalen Port.
|
static
void
|
root(InetSocketAddress adbSockAddr, IDevice device)
Fordern Sie den ADB-Daemon auf, auf dem Gerät Root zu werden.
|
static
void
|
setDevice(SocketChannel adbChan, String deviceSerialNumber)
weist adb an, mit einem bestimmten Gerät zu kommunizieren
|
static
void
|
setDevice(SocketChannel adbChan, IDevice device)
Wenn Sie eine IDevice haben, rufen Sie die Seriennummer ab und weisen Sie adb an, mit diesem Gerät zu kommunizieren.
|
static
void
|
write(SocketChannel chan, byte[] data, int length, int timeout)
Schreibt, bis alle Daten in „data“ geschrieben wurden, die optionale Länge erreicht ist, das Zeitlimit abläuft oder die Verbindung fehlschlägt.
|
static
void
|
write(SocketChannel chan, byte[] data)
Schreibt, bis alle Daten in „data“ geschrieben wurden oder die Verbindung fehlschlägt oder das Zeitlimit überschritten wird.
|
Konstanten
HOST_TRANSPORT
public static final String HOST_TRANSPORT
Konstanter Wert:
"host:transport:"
Felder
DEFAULT_CHARSET
public static final Charset DEFAULT_CHARSET
Öffentliche Methoden
createForward
public static void createForward (InetSocketAddress adbSockAddr,
IDevice device,
String localPortSpec,
String remotePortSpec)
Erstellt eine Portweiterleitung zwischen einem lokalen und einem Remote-Port.
| Parameter |
adbSockAddr |
InetSocketAddress: Die Socket-Adresse, mit der eine Verbindung zu ADB hergestellt werden soll |
device |
IDevice: das Gerät, auf dem die Portweiterleitung erfolgen soll |
localPortSpec |
String: Angabe des lokalen Ports, der weitergeleitet werden soll, im Format tcp: |
remotePortSpec |
String: Angabe des Remote-Ports, an den weitergeleitet werden soll, einer der folgenden Optionen: tcp:
localabstract: localreserved:
localfilesystem: dev: jdwp:
(nur remote) |
createHiddenException
public static AdbCommandRejectedException createHiddenException (String message,
boolean errorDuringDeviceSelection)
| Parameter |
message |
String |
errorDuringDeviceSelection |
boolean |
createJdwpForwardRequest
public static byte[] createJdwpForwardRequest (int pid)
Erstellt eine Portweiterleitungsanfrage an einen jdwp-Prozess. Dadurch wird ein Array mit „####jwdp:{pid}“ zurückgegeben.
| Parameter |
pid |
int: Die Prozess-PID des Java Debug Wire Protocol (JDWP) auf dem Gerät. |
| Gibt Folgendes zurück: |
byte[] |
|
createPassThroughConnection
public static SocketChannel createPassThroughConnection (InetSocketAddress adbSockAddr,
String deviceSerialNumber,
int pid)
Erstellt und verbindet einen neuen Pass-Through-Socket vom Host zu einem Port auf dem Gerät.
| Parameter |
deviceSerialNumber |
String: die Geräteseriennummer, zu der eine Verbindung hergestellt werden soll. Kann null oder leer sein. In diesem Fall wird die Verbindung zum ersten verfügbaren Gerät hergestellt. |
pid |
int: Die Prozess-PID, zu der eine Verbindung hergestellt werden soll. |
| Gibt Folgendes zurück: |
SocketChannel |
|
createReverse
public static void createReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec,
String localPortSpec)
Erstellt eine Portumkehrung zwischen einem Remote- und einem lokalen Port.
| Parameter |
adbSockAddr |
InetSocketAddress: Die Socket-Adresse, mit der eine Verbindung zu ADB hergestellt werden soll |
device |
IDevice: das Gerät, auf dem die Portumkehrung durchgeführt werden soll |
remotePortSpec |
String: Angabe des Remote-Ports, zu dem die Verbindung umgekehrt werden soll, einer der folgenden Optionen: tcp:
localabstract: localreserved:
localfilesystem: dev: jdwp:
(nur remote) |
localPortSpec |
String: Angabe des lokalen Ports im Format tcp: |
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
AdbHelper.AdbService adbService,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits,
InputStream is)
Führt einen Remote-Befehl auf dem Gerät aus und ruft die Ausgabe ab. Die Ausgabe wird an rcvr übergeben, sobald sie eintrifft. Der Befehl wird vom Remote-Dienst ausgeführt, der durch den Parameter „adbService“ identifiziert wird.
| Parameter |
adbSockAddr |
InetSocketAddress: die InetSocketAddress für adb. |
adbService |
AdbHelper.AdbService: Der AdbHelper.AdbService, der zum Ausführen des Befehls verwendet werden soll. |
command |
String: der auszuführende Shell-Befehl |
device |
IDevice: die IDevice, auf der der Befehl ausgeführt werden soll. |
rcvr |
IShellOutputReceiver: die IShellOutputReceiver, die die Ausgabe des Shellbefehls empfängt |
maxTimeout |
long: Maximales Zeitlimit für die Ausführung des gesamten Befehls. Ein Wert von 0 bedeutet, dass kein Zeitlimit festgelegt ist. |
maxTimeToOutputResponse |
long: Maximale Zeit zwischen der Befehlsausgabe. Wenn zwischen den Befehlsausgaben mehr Zeit vergeht, wird von der Methode ShellCommandUnresponsiveException ausgegeben. Ein Wert von 0 bedeutet, dass die Methode unbegrenzt auf die Befehlsausgabe wartet und nie eine Ausnahme auslöst. |
maxTimeUnits |
TimeUnit: Einheiten für maxTimeout- und maxTimeToOutputResponse-Werte ungleich null. |
is |
InputStream: ein optionaler InputStream, der nach dem Aufrufen des Befehls und vor dem Abrufen der Antwort gestreamt werden soll. |
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)
Führt einen Shell-Befehl auf dem Gerät aus und ruft die Ausgabe ab. Die Ausgabe wird an rcvr übergeben, sobald sie eintrifft.
| Parameter |
adbSockAddr |
InetSocketAddress: die InetSocketAddress für adb. |
command |
String: der auszuführende Shell-Befehl |
device |
IDevice: die IDevice, auf der der Befehl ausgeführt werden soll. |
rcvr |
IShellOutputReceiver: die IShellOutputReceiver, die die Ausgabe des Shellbefehls empfängt |
maxTimeout |
long: Maximale Zeit, bis der Befehl zurückgegeben wird. Ein Wert von 0 bedeutet, dass kein maximales Zeitlimit angewendet wird. |
maxTimeToOutputResponse |
long: Maximale Zeit zwischen der Befehlsausgabe. Wenn zwischen den Befehlsausgaben mehr Zeit vergeht, wird von der Methode ShellCommandUnresponsiveException ausgegeben. Ein Wert von 0 bedeutet, dass die Methode unbegrenzt auf die Befehlsausgabe wartet und nie eine Ausnahme auslöst. |
maxTimeUnits |
TimeUnit: Einheiten für maxTimeout- und maxTimeToOutputResponse-Werte ungleich null. |
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)
Führt einen Shell-Befehl auf dem Gerät aus und ruft die Ausgabe ab. Die Ausgabe wird an rcvr übergeben, sobald sie eintrifft.
| Parameter |
adbSockAddr |
InetSocketAddress: die InetSocketAddress für adb. |
command |
String: der auszuführende Shell-Befehl |
device |
IDevice: die IDevice, auf der der Befehl ausgeführt werden soll. |
rcvr |
IShellOutputReceiver: die IShellOutputReceiver, die die Ausgabe des Shellbefehls empfängt |
maxTimeToOutputResponse |
long: Maximale Zeit zwischen der Befehlsausgabe. Wenn zwischen den Befehlsausgaben mehr Zeit vergeht, wird von der Methode ShellCommandUnresponsiveException ausgegeben. Ein Wert von 0 bedeutet, dass die Methode unbegrenzt auf die Befehlsausgabe wartet und nie eine Ausnahme auslöst. |
maxTimeUnits |
TimeUnit: Einheiten für maxTimeToOutputResponse-Werte ungleich null. |
public static byte[] formAdbRequest (String payloadString)
Erstellt einen ASCII-String, dem vier Hexadezimalziffern vorangestellt sind. Die Eröffnung „####“ ist die Länge des restlichen Strings, codiert als ASCII-Hexadezimalzahl (Groß- und Kleinschreibung spielt keine Rolle).
| Parameter |
payloadString |
String |
| Gibt Folgendes zurück: |
byte[] |
|
getFeatures
public static String getFeatures (IDevice device)
Fragt eine Reihe unterstützter Funktionen vom Gerät ab.
| Parameter |
device |
IDevice: das Gerät, auf dem die Portweiterleitung erfolgen soll |
| Gibt Folgendes zurück: |
String |
|
getFrameBuffer
public static RawImage getFrameBuffer (InetSocketAddress adbSockAddr,
IDevice device,
long timeout,
TimeUnit unit)
Ruft den Framebuffer vom Gerät mit dem angegebenen Zeitlimit ab. Ein Zeitlimit von 0 bedeutet, dass unbegrenzt gewartet wird.
| Parameter |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
timeout |
long |
unit |
TimeUnit |
getHostFeatures
public static String getHostFeatures ()
Fragt eine Reihe unterstützter Funktionen vom ADB-Host ab.
| Gibt Folgendes zurück: |
String |
|
Öffnen
public static SocketChannel open (InetSocketAddress adbSockAddr,
IDevice device,
int devicePort)
Erstellen Sie eine neue Pass-Through-Socket-Verbindung vom Host zu einem Port auf dem Gerät.
| Parameter |
device |
IDevice: das Gerät, mit dem eine Verbindung hergestellt werden soll. Kann null sein. In diesem Fall wird die Verbindung zum ersten verfügbaren Gerät hergestellt. |
devicePort |
int: der Port, den wir öffnen |
| Gibt Folgendes zurück: |
SocketChannel |
|
rawAdbService
public static SocketChannel rawAdbService (InetSocketAddress socketAddress,
IDevice device,
String command,
AdbHelper.AdbService service)
Rufen Sie den Dienst auf einem Remote-Gerät auf. Gibt einen Socket-Channel zurück, der mit dem ausführenden Prozess verbunden ist.
ddlmib gibt die Eigentümerschaft des zurückgegebenen SocketChannel auf und muss nach der Verwendung explizit geschlossen werden.
| Parameter |
device |
IDevice: das Gerät, mit dem eine Verbindung hergestellt werden soll. Kann null sein. In diesem Fall wird die Verbindung zum ersten verfügbaren Gerät hergestellt. |
command |
String: der auszuführende Befehl |
service |
AdbHelper.AdbService: Der AdbHelper.AdbService, der zum Ausführen des Befehls verwendet werden soll. |
| Gibt Folgendes zurück: |
SocketChannel |
|
rawExec
public static SocketChannel rawExec (InetSocketAddress socketAddress,
IDevice device,
String executable,
String[] parameters)
Rufen Sie den Dienst „host:exec“ auf einem Remote-Gerät auf. Gibt einen Socket-Channel zurück, der mit dem ausgeführten Prozess verbunden ist. Der Exec-Dienst unterscheidet nicht zwischen stdout und stderr. Was vom Socket gelesen wird, kann also aus beiden Ausgaben stammen und verschachtelt sein.
ddlmib gibt die Eigentümerschaft des zurückgegebenen SocketChannel auf und muss nach der Verwendung explizit geschlossen werden.
| Parameter |
device |
IDevice: das Gerät, mit dem eine Verbindung hergestellt werden soll. Kann null sein. In diesem Fall wird die Verbindung zum ersten verfügbaren Gerät hergestellt. |
executable |
String: der absolute Pfad der auszuführenden Datei |
parameters |
String: die Parameter, die beim Ausführen der ausführbaren Datei angegeben werden müssen |
| Gibt Folgendes zurück: |
SocketChannel |
|
readAdbResponse
public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan,
boolean readDiagString)
Liest die Antwort von ADB nach einem Befehl.
| Parameter |
chan |
SocketChannel: Der Socket-Kanal, der mit adb verbunden ist. |
readDiagString |
boolean: Wenn „true“, erwarten wir, dass auf eine OKAY-Antwort ein Diagnosestring folgt. Andernfalls erwarten wir, dass der Diagnosestring nur auf einen Fehler folgt. |
| Löst aus |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
IOException |
bei einem E/A-Fehler bei der Verbindung. |
neu starten
public static void reboot (String into,
InetSocketAddress adbSockAddr,
IDevice device)
Starte das Gerät neu.
| Parameter |
into |
String: Das Ziel des Neustarts (Wiederherstellung, Bootloader). Oder „null“, um das Gerät einfach neu zu starten. |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
removeForward
public static void removeForward (InetSocketAddress adbSockAddr,
IDevice device,
String localPortSpec)
Entfernen Sie eine Portweiterleitung zwischen einem lokalen und einem Remote-Port.
| Parameter |
adbSockAddr |
InetSocketAddress: Die Socket-Adresse, mit der eine Verbindung zu ADB hergestellt werden soll |
device |
IDevice: das Gerät, auf dem die Portweiterleitung entfernt werden soll |
localPortSpec |
String: Angabe des weitergeleiteten lokalen Ports im Format tcp: |
removeReverse
public static void removeReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec)
Entfernen Sie eine Portumkehrung zwischen einem Remote- und einem lokalen Port.
| Parameter |
adbSockAddr |
InetSocketAddress: Die Socket-Adresse, mit der eine Verbindung zu ADB hergestellt werden soll |
device |
IDevice: das Gerät, auf dem die Portumkehrung entfernt werden soll |
remotePortSpec |
String: Spezifikation des Remote-Ports, umgekehrt zu einem der folgenden: tcp:
localabstract: localreserved:
localfilesystem: dev: jdwp:
(nur remote) |
root
public static void root (InetSocketAddress adbSockAddr,
IDevice device)
Fordern Sie den ADB-Daemon auf, auf dem Gerät Root zu werden. Dies kann im Hintergrund fehlschlagen und ist nur bei Entwickler-Builds möglich. Weitere Informationen finden Sie unter „adb root“. Wenn Sie wissen müssen, ob der Befehl erfolgreich war, können Sie das Ergebnis von „executeRemoteCommand“ für „echo \$USER_ID“ prüfen. Wenn es 0 ist, wird „adbd“ als Root ausgeführt.
| Parameter |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
setDevice
public static void setDevice (SocketChannel adbChan,
String deviceSerialNumber)
weist adb an, mit einem bestimmten Gerät zu kommunizieren
| Parameter |
adbChan |
SocketChannel: die Socketverbindung zu ADB |
deviceSerialNumber |
String: Die Seriennummer des Geräts, mit dem kommuniziert werden soll. Wenn „null“, wird das von ADB ausgewählte Standardgerät verwendet. |
setDevice
public static void setDevice (SocketChannel adbChan,
IDevice device)
Wenn Sie eine IDevice haben, rufen Sie die Seriennummer ab und weisen Sie adb an, mit diesem Gerät zu kommunizieren.
| Parameter |
adbChan |
SocketChannel: Die Socketverbindung zu adb. |
device |
IDevice: das Gerät, mit dem Sie sprechen möchten. |
write
public static void write (SocketChannel chan,
byte[] data,
int length,
int timeout)
Schreibt, bis alle Daten in „data“ geschrieben wurden, die optionale Länge erreicht ist, das Zeitlimit abläuft oder die Verbindung fehlschlägt. Gibt „true“ zurück, wenn alle Daten geschrieben wurden.
| Parameter |
chan |
SocketChannel: Der geöffnete Socket, in den geschrieben werden soll. |
data |
byte: Der zu sendende Puffer. |
length |
int: Die Länge, die geschrieben werden soll, oder -1, um den gesamten Puffer zu senden. |
timeout |
int: Der Zeitüberschreitungswert. Ein Zeitlimit von null bedeutet „unbegrenzt warten“. |
| Löst aus |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
IOException |
bei einem E/A-Fehler bei der Verbindung. |
write
public static void write (SocketChannel chan,
byte[] data)
Schreibt, bis alle Daten in „data“ geschrieben wurden oder die Verbindung fehlschlägt oder das Zeitlimit überschritten wird.
Dabei wird der Standard-Zeitüberschreitungswert verwendet.
| Parameter |
chan |
SocketChannel: Der geöffnete Socket, in den geschrieben werden soll. |
data |
byte: Der zu sendende Puffer. |
| Löst aus |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
IOException |
bei einem E/A-Fehler bei der Verbindung. |