為配合主幹穩定開發模型,並確保生態系統的平台穩定性,我們將於 2026 年起,在第 2 季和第 4 季將原始碼發布至 AOSP。如要建構及貢獻 AOSP,建議使用 android-latest-release,而非 aosp-main。android-latest-release 資訊清單分支版本一律會參照推送至 AOSP 的最新版本。詳情請參閱「Android 開放原始碼計畫變更」一文。
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
AdbHelper
public
final
class
AdbHelper
extends Object
| java.lang.Object
|
| ↳ |
com.android.tradefed.device.server.AdbHelper
|
處理要求和連線至 adb 的輔助類別。
AndroidDebugBridge 是用於連線至 adb 的公開 API,而 AdbHelper 則負責處理低階作業。
目前使用的是自旋等待非阻塞式 I/O。選取器效率較高,但就我們目前執行的作業而言,似乎有點過度。
摘要
公用方法 |
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)
建立 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)
寫入資料,直到寫入「資料」中的所有資料、達到選用長度、逾時或連線失敗為止。
|
static
void
|
write(SocketChannel chan, byte[] 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:
(僅限遠端) |
createHiddenException
public static AdbCommandRejectedException createHiddenException (String message,
boolean errorDuringDeviceSelection)
| 參數 |
message |
String |
errorDuringDeviceSelection |
boolean |
createJdwpForwardRequest
public static byte[] createJdwpForwardRequest (int pid)
建立轉送至 jdwp 程序的連接埠轉送要求。這會傳回包含「####jwdp:{pid}」的陣列。
| 參數 |
pid |
int:裝置上的 jdwp 程序 PID。 |
createPassThroughConnection
public static SocketChannel createPassThroughConnection (InetSocketAddress adbSockAddr,
String deviceSerialNumber,
int pid)
從主機到裝置上的通訊埠,建立並連線新的直通通訊端。
| 參數 |
deviceSerialNumber |
String:要連線的裝置序號。可以為空值或空白,在這種情況下,連線會連至第一個可用的裝置。 |
pid |
int:要連線的程序 PID。 |
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: |
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)
在裝置上執行殼層指令並擷取輸出內容。我們會在rcvr上架後盡快提供給你。
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 參數所識別的遠端服務執行。
executeRemoteCommand
public static void executeRemoteCommand (InetSocketAddress adbSockAddr,
String command,
IDevice device,
IShellOutputReceiver rcvr,
long maxTimeout,
long maxTimeToOutputResponse,
TimeUnit maxTimeUnits)
在裝置上執行殼層指令並擷取輸出內容。我們會在rcvr上架後盡快提供給你。
public static byte[] formAdbRequest (String payloadString)
建立 ASCII 字串,前面加上四個十六進位數字。開頭的「####」是其餘字串的長度,以 ASCII 十六進位編碼 (大小寫不限)。
getFeatures
public static String getFeatures (IDevice device)
從裝置查詢一組支援的功能。
| 參數 |
device |
IDevice:要進行通訊埠轉送的裝置 |
getFrameBuffer
public static RawImage getFrameBuffer (InetSocketAddress adbSockAddr,
IDevice device,
long timeout,
TimeUnit unit)
從裝置擷取緩衝區,並設定逾時時間。如果逾時值為 0,表示會永久等候。
| 參數 |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
timeout |
long |
unit |
TimeUnit |
getHostFeatures
public static String getHostFeatures ()
從 ADB 主機查詢一組支援的功能。
開啟
public static SocketChannel open (InetSocketAddress adbSockAddr,
IDevice device,
int devicePort)
建立並連線新的直通通訊端,從主機連線至裝置上的通訊埠。
| 參數 |
device |
IDevice:要連線的裝置。可以為空值,在這種情況下,連線會連至第一個可用裝置。 |
devicePort |
int:要開啟的通訊埠 |
rawAdbService
public static SocketChannel rawAdbService (InetSocketAddress socketAddress,
IDevice device,
String command,
AdbHelper.AdbService service)
在遠端裝置上叫用服務。傳回已連線至執行中程序的 Socket 管道。
ddlmib 會放棄傳回的 SocketChannel 所有權,且必須在用完後明確關閉。
| 參數 |
device |
IDevice:要連線的裝置。可以為空值,在這種情況下,連線會連至第一個可用裝置。 |
command |
String:要執行的指令 |
service |
AdbHelper.AdbService:用於執行指令的 AdbHelper.AdbService。 |
rawExec
public static SocketChannel rawExec (InetSocketAddress socketAddress,
IDevice device,
String executable,
String[] parameters)
在遠端裝置上叫用 host:exec 服務。傳回已連線至執行中程序的 Socket 管道。請注意,exec 服務不會區分 stdout 和 stderr,因此從通訊端讀取的任何內容都可能來自任一輸出,且可能會交錯。
ddlmib 會放棄傳回的 SocketChannel 所有權,且必須在用完後明確關閉。
| 參數 |
device |
IDevice:要連線的裝置。可以為空值,在這種情況下,連線會連至第一個可用裝置。 |
executable |
String:要執行的可執行檔絕對路徑 |
parameters |
String:執行可執行檔時提供的參數 |
readAdbResponse
public static AdbHelper.AdbResponse readAdbResponse (SocketChannel chan,
boolean readDiagString)
讀取指令後來自 Android 偵錯橋接器的回應。
| 參數 |
chan |
SocketChannel:連線至 ADB 的通訊端管道。 |
readDiagString |
boolean:如果為 true,我們預期 OKAY 回應後會接續診斷字串。否則,我們只會預期診斷字串會接在 FAIL 後面。 |
重開。
public static void reboot (String into,
InetSocketAddress adbSockAddr,
IDevice device)
重新啟動裝置。
| 參數 |
into |
String:要重新啟動進入的模式 (復原、開機載入程式)。或空值,僅重新啟動。 |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
removeForward
public static void removeForward (InetSocketAddress adbSockAddr,
IDevice device,
String localPortSpec)
移除本機通訊埠與遠端通訊埠之間的通訊埠轉送。
| 參數 |
adbSockAddr |
InetSocketAddress:要連線至 adb 的通訊端位址 |
device |
IDevice:要移除通訊埠轉送的裝置 |
localPortSpec |
String:轉送的本機通訊埠規格,格式應為 tcp: |
removeReverse
public static void removeReverse (InetSocketAddress adbSockAddr,
IDevice device,
String remotePortSpec)
移除遠端通訊埠與本機通訊埠之間的通訊埠反向。
| 參數 |
adbSockAddr |
InetSocketAddress:要連線至 adb 的通訊端位址 |
device |
IDevice:要移除通訊埠反向的裝置 |
remotePortSpec |
String:反向指定遠端通訊埠,可以是下列其中一種:tcp:
localabstract: localreserved:
localfilesystem: dev: jdwp:
(僅限遠端) |
根
public static void root (InetSocketAddress adbSockAddr,
IDevice device)
要求 adb 精靈在裝置上成為根使用者。這項作業可能會無聲無息地失敗,而且只能在開發人員建構版本中成功。詳情請參閱「adb root」。如要確認是否成功,可以檢查「echo \$USER_ID」的 executeRemoteCommand 結果,如果結果為 0,表示 adbd 以根身分執行。
| 參數 |
adbSockAddr |
InetSocketAddress |
device |
IDevice |
setDevice
public static void setDevice (SocketChannel adbChan,
IDevice device)
假設 IDevice 抓取序號,並告知 adb 與該裝置通訊。
| 參數 |
adbChan |
SocketChannel:與 ADB 的通訊端連線。 |
device |
IDevice:要與之對話的裝置。 |
setDevice
public static void setDevice (SocketChannel adbChan,
String deviceSerialNumber)
告訴 adb 與特定裝置通訊
| 參數 |
adbChan |
SocketChannel:與 adb 的通訊端連線 |
deviceSerialNumber |
String:要通訊的裝置序號,如果為空值,則預設選取的裝置是 adb 選取的裝置。 |
寫出好文
public static void write (SocketChannel chan,
byte[] data,
int length,
int timeout)
寫入作業會持續進行,直到「資料」中的所有資料都寫入完畢、達到選用長度、逾時或連線失敗為止。如果所有資料都已寫入,則傳回「true」。
| 參數 |
chan |
SocketChannel:要寫入的已開啟通訊端。 |
data |
byte:要傳送的緩衝區。 |
length |
int:要寫入的長度,或 -1 (傳送整個緩衝區)。 |
timeout |
int:逾時值。如果逾時時間為零,表示「永久等候」。 |
寫出好文
public static void write (SocketChannel chan,
byte[] data)
寫入資料,直到「資料」中的所有資料都寫入完畢,或是連線失敗或逾時為止。
這會使用預設逾時值。
| 參數 |
chan |
SocketChannel:要寫入的已開啟通訊端。 |
data |
byte:要傳送的緩衝區。 |
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-12-04 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-12-04 (世界標準時間)。"],[],[]]