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, 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
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
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 und stellen Sie eine Verbindung vom Host zu einem Port auf dem Gerät her.
|
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)
Starten Sie 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, IDevice device)
Wenn Sie ein IDevice haben, rufen Sie die Seriennummer ab und weisen Sie adb an, mit diesem Gerät zu kommunizieren.
|
static
void
|
setDevice(SocketChannel adbChan, String deviceSerialNumber)
weist adb an, mit einem bestimmten 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, zu 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 PID des JDWP-Prozesses auf dem Gerät. |
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 Seriennummer des Geräts, zu dem 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. |
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:“ |
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 ERROR(/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 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“ angegeben wird.
| Parameter |
adbSockAddr |
InetSocketAddress: die ERROR(/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 ERROR(/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 ERROR(/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: Die maximale Zeit, die der Befehl zum Zurückgeben benötigt. 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. |
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 |
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 |
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.
Öffnen
public static SocketChannel open (InetSocketAddress adbSockAddr,
IDevice device,
int devicePort)
Erstellen Sie eine neue Pass-Through-Socket und stellen Sie eine Verbindung vom Host zu einem Port auf dem Gerät her.
| 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 |
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 das Eigentum am 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. |
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 das Eigentum am 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 übergeben werden |
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. |
| Ausgabe |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
|
bei einem E/A-Fehler bei der Verbindung. |
neu starten
public static void reboot (String into,
InetSocketAddress adbSockAddr,
IDevice device)
Starten Sie 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 nur bei Entwickler-Builds funktionieren. Weitere Informationen finden Sie unter „adb root“. Wenn Sie wissen möchten, ob der Vorgang 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,
IDevice device)
Wenn Sie ein 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. |
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 der Wert null ist, wird das von ADB ausgewählte Standardgerät verwendet. |
für mich
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“. |
| Ausgabe |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
|
bei einem E/A-Fehler bei der Verbindung. |
für mich
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. |
| Ausgabe |
TimeoutException |
bei Zeitüberschreitung der Verbindung. |
|
bei einem E/A-Fehler bei der Verbindung. |