AdbHelper

public final class AdbHelper
extends Object

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


adb へのリクエストと接続を処理するヘルパークラス。

AndroidDebugBridge は adb に接続するための公開 API で、AdbHelper は低レベルの処理を行います。

現在、これはスピン待機非ブロック I/O を使用しています。セレクタの方が効率的ですが、ここではやりすぎのようです。

概要

ネストされたクラス

class AdbHelper.AdbResponse

ADB からのレスポンス。 

定数

String HOST_TRANSPORT

フィールド

public static final Charset DEFAULT_CHARSET

パブリック メソッド

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

ローカル ポートとリモート ポート間のポート転送を作成します。

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

jdwp プロセスへのポート転送リクエストを作成します。

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

ホストからデバイスのポートへの新しいパススルー ソケットを作成して接続します。

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

リモート ポートとローカル ポート間のポート反転を作成します。

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

デバイスでシェルコマンドを実行し、出力を取得します。

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

デバイスでリモート コマンドを実行し、出力を取得します。

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

デバイスでシェルコマンドを実行し、出力を取得します。

static byte[] formAdbRequest(String payloadString)

4 桁の 16 進数に続く ASCII 文字列を作成します。

static String getFeatures(IDevice device)

デバイスからサポートされている機能のセットをクエリします。

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

指定されたタイムアウトでデバイスからフレームバッファを取得します。

static String getHostFeatures()

ADB ホストからサポートされている機能のセットをクエリします。

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

ホストからデバイスのポートに新しいパススルー ソケットを作成して接続します。

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

リモート デバイスでサービスを呼び出します。

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

リモート デバイスで host:exec サービスを呼び出します。

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

コマンドの後に ADB からのレスポンスを読み取ります。

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

デバイスを再起動します。

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

ローカル ポートとリモート ポート間のポート転送を削除します。

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

リモート ポートとローカル ポート間のポート反転を削除します。

static void root(InetSocketAddress adbSockAddr, IDevice device)

adb デーモンにデバイスのルート権限を取得するようリクエストします。

static void setDevice(SocketChannel adbChan, IDevice device)

IDevice が指定されたら、シリアル番号を取得して、そのデバイスと通信するように adb に指示します。

static void setDevice(SocketChannel adbChan, String deviceSerialNumber)

特定のデバイスと通信するよう adb に指示します。

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

「data」内のすべてのデータが書き込まれるか、オプションの長さが上限に達するか、タイムアウトが期限切れになるか、接続が失敗するまで書き込みます。

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

「data」内のすべてのデータが書き込まれるか、接続が失敗またはタイムアウトするまで書き込みます。

定数

HOST_TRANSPORT

public static final String HOST_TRANSPORT

定数値: "host:transport:"

フィールド

DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET

パブリック メソッド

createForward

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

ローカル ポートとリモート ポート間のポート転送を作成します。

パラメータ
adbSockAddr InetSocketAddress: adb に接続するソケット アドレス

device IDevice: ポート転送を行うデバイス

localPortSpec String: 転送するローカルポートの指定。形式は tcp:にする必要があります。

remotePortSpec String: 転送先のリモートポートの指定。次のいずれか: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (リモートのみ)

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message, 
                boolean errorDuringDeviceSelection)

パラメータ
message String

errorDuringDeviceSelection boolean

戻り値
AdbCommandRejectedException

createHiddenException

public static AdbCommandRejectedException createHiddenException (String message)

パラメータ
message String

戻り値
AdbCommandRejectedException

createJdwpForwardRequest

public static byte[] createJdwpForwardRequest (int pid)

jdwp プロセスへのポート転送リクエストを作成します。これにより、「####jwdp:{pid}」を含む配列が返されます。

パラメータ
pid int: デバイス上の jdwp プロセスの PID。

戻り値
byte[]

createPassThroughConnection

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

ホストからデバイスのポートへの新しいパススルー ソケットを作成して接続します。

パラメータ
deviceSerialNumber String: 接続するデバイスのシリアル番号。null または空にできます。その場合、接続は最初に使用可能なデバイスに対して行われます。

pid int: 接続するプロセス PID。

戻り値
SocketChannel

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

createReverse

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

リモートポートとローカルポート間のポート反転を作成します。

パラメータ
adbSockAddr InetSocketAddress: adb に接続するソケット アドレス

device IDevice: ポートの反転を行うデバイス

remotePortSpec String: 逆転送するリモートポートの指定。tcp: localabstract: localreserved: localfilesystem: dev: jdwp: のいずれか(リモートのみ)

localPortSpec String: ローカルポートの指定。tcp:形式にする必要があります。

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

executeRemoteCommand

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

デバイスでシェルコマンドを実行し、出力を取得します。出力は到着時に rcvr に渡されます。

パラメータ
adbSockAddr InetSocketAddress: adb に渡す ERROR(/InetSocketAddress)

command String: 実行するシェルコマンド

device IDevice: コマンドを実行する IDevice

rcvr IShellOutputReceiver: シェル コマンドの出力を受け取る IShellOutputReceiver

maxTimeToOutputResponse long: コマンド出力間の最大時間。コマンド出力間の時間が長くなると、メソッドは ShellCommandUnresponsiveException をスローします。値が 0 の場合、メソッドはコマンド出力を無期限に待機し、例外をスローしません。

maxTimeUnits TimeUnit: ゼロ以外の maxTimeToOutputResponse 値の単位。

例外
TimeoutException コマンドの送信時に接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
ShellCommandUnresponsiveException シェルコマンドが maxTimeToOutputResponse より長い期間にわたって出力を送信しない場合。
接続で I/O エラーが発生した場合。

executeRemoteCommand

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

デバイスでリモート コマンドを実行し、出力を取得します。出力は到着した順に rcvr に渡されます。このコマンドは、adbService パラメータで識別されるリモート サービスによって実行されます。

パラメータ
adbSockAddr InetSocketAddress: adb に渡す ERROR(/InetSocketAddress)

adbService AdbHelper.AdbService: コマンドの実行に使用する AdbHelper.AdbService

command String: 実行するシェルコマンド

device IDevice: コマンドを実行する IDevice

rcvr IShellOutputReceiver: シェル コマンドの出力を受け取る IShellOutputReceiver

maxTimeout long: コマンド全体の実行の最大タイムアウト。値 0 は、タイムアウトがないことを意味します。

maxTimeToOutputResponse long: コマンド出力間の最大時間。コマンド出力間の時間が長くなると、メソッドは ShellCommandUnresponsiveException をスローします。値が 0 の場合、メソッドはコマンド出力を無期限に待機し、例外をスローしません。

maxTimeUnits TimeUnit: ゼロ以外の maxTimeout 値と maxTimeToOutputResponse 値の単位。

is InputStream: コマンドの呼び出し後、レスポンスの取得前にストリーミングされる ERROR(/InputStream)(省略可)。

例外
TimeoutException コマンドの送信時に接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
ShellCommandUnresponsiveException シェルコマンドが maxTimeToOutputResponse より長い期間にわたって出力を送信しない場合。
接続で I/O エラーが発生した場合。

executeRemoteCommand

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

デバイスでシェルコマンドを実行し、出力を取得します。出力は到着時に rcvr に渡されます。

パラメータ
adbSockAddr InetSocketAddress: adb に渡す ERROR(/InetSocketAddress)

command String: 実行するシェルコマンド

device IDevice: コマンドを実行する IDevice

rcvr IShellOutputReceiver: シェル コマンドの出力を受け取る IShellOutputReceiver

maxTimeout long: コマンドが戻るまでの最大時間。値 0 は、最大タイムアウトが適用されないことを意味します。

maxTimeToOutputResponse long: コマンド出力間の最大時間。コマンド出力間の時間が長くなると、メソッドは ShellCommandUnresponsiveException をスローします。値が 0 の場合、メソッドはコマンド出力を無期限に待機し、例外をスローしません。

maxTimeUnits TimeUnit: ゼロ以外の maxTimeout 値と maxTimeToOutputResponse 値の単位。

例外
TimeoutException コマンドの送信時に接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
ShellCommandUnresponsiveException シェルコマンドが maxTimeToOutputResponse より長い期間にわたって出力を送信しない場合。
接続で I/O エラーが発生した場合。

formAdbRequest

public static byte[] formAdbRequest (String payloadString)

4 桁の 16 進数に続く ASCII 文字列を作成します。先頭の「####」は、文字列の残りの部分の長さで、ASCII 16 進数としてエンコードされます(大文字と小文字は区別されません)。

パラメータ
payloadString String

戻り値
byte[]

getFeatures

public static String getFeatures (IDevice device)

デバイスからサポートされている機能のセットをクエリします。

パラメータ
device IDevice: ポート転送を行うデバイス

戻り値
String

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

getFrameBuffer

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

指定されたタイムアウトでデバイスからフレームバッファを取得します。タイムアウトが 0 の場合、無期限に待機します。

パラメータ
adbSockAddr InetSocketAddress

device IDevice

timeout long

unit TimeUnit

戻り値
RawImage

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

getHostFeatures

public static String getHostFeatures ()

ADB ホストからサポートされている機能のセットをクエリします。

戻り値
String

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

開く

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

ホストからデバイスのポートに新しいパススルー ソケットを作成して接続します。

パラメータ
device IDevice: 接続するデバイス。null にすることもできます。その場合、接続は最初に使用可能なデバイスに対して行われます。

devicePort int: 開くポート

戻り値
SocketChannel

例外
TimeoutException 接続がタイムアウトした場合。
接続で I/O エラーが発生した場合。
AdbCommandRejectedException adb がコマンドを拒否した場合

rawAdbService

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

リモート デバイスでサービスを呼び出します。実行中のプロセスに接続されているソケット チャネルを返します。

ddlmib は返された SocketChannel の所有権を放棄し、使用後に明示的に閉じる必要があります。

パラメータ
device IDevice: 接続するデバイス。null にすることもできます。その場合、接続は最初に使用可能なデバイスに対して行われます。

command String: 実行するコマンド

service AdbHelper.AdbService: コマンドの実行に使用する AdbHelper.AdbService

戻り値
SocketChannel

例外
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

rawExec

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

リモート デバイスで host:exec サービスを呼び出します。実行中のプロセスに接続されているソケット チャネルを返します。exec サービスは stdout と stderr を区別しないため、ソケットから読み取られたものはどちらの出力からでも取得でき、インターリーブされる可能性があります。

ddlmib は返された SocketChannel の所有権を放棄し、使用後に明示的に閉じる必要があります。

パラメータ
device IDevice: 接続するデバイス。null にすることもできます。その場合、接続は最初に使用可能なデバイスに対して行われます。

executable String: 実行する実行可能ファイルの絶対パス

parameters String: 実行可能ファイルの実行時に指定されるパラメータ

戻り値
SocketChannel

例外
IOException
com.android.ddmlib.TimeoutException
com.android.ddmlib.AdbCommandRejectedException
AdbCommandRejectedException
TimeoutException

readAdbResponse

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

コマンドの後に ADB からのレスポンスを読み取ります。

パラメータ
chan SocketChannel: adb に接続されているソケット チャンネル。

readDiagString boolean: true の場合、OKAY レスポンスの後に診断文字列が続くことが想定されます。それ以外の場合は、診断文字列は FAIL の後にのみ続くことが想定されます。

戻り値
AdbHelper.AdbResponse

例外
TimeoutException 接続がタイムアウトした場合。
接続で I/O エラーが発生した場合。

再起動

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

デバイスを再起動します。

パラメータ
into String: 再起動するモード(リカバリ、ブートローダー)。再起動のみを行う場合は null。

adbSockAddr InetSocketAddress

device IDevice

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

removeForward

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

ローカル ポートとリモート ポート間のポート転送を削除します。

パラメータ
adbSockAddr InetSocketAddress: adb に接続するソケット アドレス

device IDevice: ポート転送を削除するデバイス

localPortSpec String: 転送されたローカルポートの指定。tcp:の形式にする必要があります。

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

removeReverse

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

リモート ポートとローカル ポート間のポート反転を削除します。

パラメータ
adbSockAddr InetSocketAddress: adb に接続するソケット アドレス

device IDevice: ポートの反転を削除するデバイス

remotePortSpec String: 接続先のリモートポートの指定。tcp: localabstract: localreserved: localfilesystem: dev: jdwp: のいずれか(リモートのみ)

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

ルート

public static void root (InetSocketAddress adbSockAddr, 
                IDevice device)

デバイスで adb デーモンをルートにするようリクエストします。これはサイレントに失敗する可能性があり、デベロッパー ビルドでのみ成功します。詳しくは、「adb root」をご覧ください。成功したかどうかを確認する必要がある場合は、executeRemoteCommand の結果で「echo \$USER_ID」を確認します。0 であれば、adbd は root として実行されています。

パラメータ
adbSockAddr InetSocketAddress

device IDevice

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

setDevice

public static void setDevice (SocketChannel adbChan, 
                IDevice device)

IDevice が指定された場合、シリアル番号を取得し、そのデバイスと通信するよう adb に指示します。

パラメータ
adbChan SocketChannel: adb へのソケット接続。

device IDevice: 通信するデバイス。

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

setDevice

public static void setDevice (SocketChannel adbChan, 
                String deviceSerialNumber)

特定のデバイスと通信するよう adb に指示します。

パラメータ
adbChan SocketChannel: adb へのソケット接続

deviceSerialNumber String: 通信するデバイスのシリアル番号。null の場合、adb が選択したデバイスがデフォルトのデバイスとして選択されます。

例外
TimeoutException 接続がタイムアウトした場合。
AdbCommandRejectedException adb がコマンドを拒否した場合
接続で I/O エラーが発生した場合。

文章の作成

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

「data」内のすべてのデータが書き込まれるか、オプションの長さが指定された場合、その長さに達するか、タイムアウトが期限切れになるか、接続が失敗するまで書き込みます。すべてのデータが書き込まれた場合は「true」を返します。

パラメータ
chan SocketChannel: 書き込み先の開いているソケット。

data byte: 送信するバッファ。

length int: 書き込む長さ。バッファ全体を送信する場合は -1。

timeout int: タイムアウト値。タイムアウトが 0 の場合は「永久に待機」を意味します。

例外
TimeoutException 接続がタイムアウトした場合。
接続で I/O エラーが発生した場合。

文章の作成

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

「data」内のすべてのデータが書き込まれるか、接続が失敗またはタイムアウトするまで書き込みます。

デフォルトのタイムアウト値が使用されます。

パラメータ
chan SocketChannel: 書き込み先の開いているソケット。

data byte: 送信するバッファ。

例外
TimeoutException 接続がタイムアウトした場合。
接続で I/O エラーが発生した場合。