Android Debug Bridge (adb
) 是一種多功能的指令列工具,可讓您與裝置通訊。adb
指令會執行各種裝置動作 (例如安裝應用程式及偵錯應用程式)。adb
提供 Unix 殼層,可讓您在裝置上執行各種指令。這是一個用戶端伺服器程式,內含三個元件:
- 用戶端:傳送指令。用戶端會在您的開發機器上執行。您可以發出
adb
指令,透過指令列終端機叫用用戶端。 - daemon (adbd) 負責在裝置上執行指令。在每個裝置上,Demem 都會做為背景程序執行。
- 伺服器:管理用戶端與 Daemon 之間的通訊。伺服器會在開發機器上做為背景程序執行。
adb
已納入 Android SDK Platform Tools 套件中,您可以下載此套件並使用 SDK Manager,就會將其安裝在 android_sdk/platform-tools/
。若您想使用獨立的 Android SDK Platform Tools 套件,可以前往這裡下載。
如要瞭解如何透過 adb
連結裝置來使用 (包括如何使用 Connection Assistant 排解常見問題),請參閱「在硬體裝置上執行應用程式」。
ADB 的運作方式
啟動 adb
用戶端時,用戶端會先檢查 adb
伺服器程序是否已在執行。如果沒有,系統就會啟動伺服器程序。伺服器啟動時,會繫結至本機 TCP 通訊埠 5037,並監聽從 adb
用戶端傳送的指令。
注意:所有 adb
用戶端都會透過通訊埠 5037 與 adb
伺服器進行通訊。
伺服器隨後會設定所有運作中裝置的連線。做法是掃描前 16 個模擬器使用的 5555 至 5585 範圍中的奇數編號通訊埠,以找出模擬器。在伺服器找到 adb
Daemon (adbd) 時,就會設定該通訊埠的連線。
請注意,每個模擬器使用一組序列通訊埠,一個用於主控台連線的雙數編號通訊埠,以及一個用於 adb
連線的奇數編號通訊埠。例如:
模擬器 1,主控台:5554
模擬器 1,adb
:5555
模擬器 2,主控台:5556
模擬器 2,adb
:5557
依此類推…
如上所示,模擬器連線至 adb
通訊埠 5555 的模擬器,與主機在通訊埠 5554 上監聽的模擬器相同。
伺服器為所有裝置設定連線後,即可使用 adb
指令存取這些裝置。伺服器會管理裝置的連線,並處理多個 adb
用戶端的指令,因此您可以從任何用戶端或指令碼控制任何裝置。
在裝置上啟用 ADB 偵錯
如要在透過 USB 連線的裝置中使用 ADB,您必須在「Developer options」下的裝置系統設定中啟用「USB debugging」。在 Android 4.2 (API 級別 17) 以上版本中,「Developer options」畫面會預設為隱藏,如要顯示該畫面,請啟用開發人員選項。
您現在可以使用 USB 連結裝置。您可以在 android_sdk/platform-tools/
目錄中執行 adb devices
,確認裝置已連線。如果成功連線,裝置名稱會顯示為「裝置」。
注意:當您連接搭載 Android 4.2.2 (API 級別 17) 以上版本的裝置時,系統會顯示對話方塊,詢問您是否接受 RSA 金鑰,以便透過這部電腦進行偵錯。這個安全性機制會保護使用者裝置,因為除非您能解鎖裝置並確認對話方塊,否則無法執行 USB 偵錯和其他 ADB 指令。
如要進一步瞭解如何透過 USB 連線至裝置,請參閱「在硬體裝置上執行應用程式」。
透過 Wi-Fi 連線至裝置
注意:下方的操作說明不適用於搭載 Android 11 (API 級別 30) 的 Wear 裝置。詳情請參閱「對 Wear OS 應用程式進行偵錯」指南。
Android 11 (API 級別 30) 以上版本支援使用 Android Debug Bridge (adb) 從工作站無線部署應用程式,並進行偵錯。舉例來說,您可以將可偵錯的應用程式部署至多部遠端裝置,而無須透過 USB 實際連接裝置。這樣就不必處理常見的 USB 連線問題,例如安裝驅動程式。
開始使用無線偵錯功能前,您必須完成下列步驟:
-
確認工作站和裝置已連上同一個無線網路。
-
確認您的手機搭載 Android 11 (API 級別 30) 以上版本;若使用電視和 WearOS,則請確認裝置搭載 Android 13 (API 級別 33) 以上版本。詳情請參閱「檢查及更新 Android 版本」。
-
如果您使用 IDE,請確認已安裝最新版的 Android Studio。如要下載,請按這裡。
-
在工作站上,將 SDK Platform Tools 更新至最新版本。
如要使用無線偵錯功能,您必須使用 QR code 或配對碼將裝置與工作站配對。工作站和裝置必須連上同一個無線網路。如要連線至裝置,請按照下列步驟操作:
-
在裝置上啟用開發人員選項。
-
開啟 Android Studio,接著在執行設定選單中選取「Pair Devices Using Wi-Fi」。
畫面上會隨即顯示「Pair devices over Wi-Fi」彈出式視窗,如圖 2 所示。
-
在裝置上輕觸「無線偵錯」,然後配對裝置:
-
如要透過 QR code 配對裝置,請選取「Pair device with QR code」,接著掃描圖 2 顯示的「Pair devices over Wi-Fi」彈出式視窗中的 QR code。
-
如要以配對碼配對裝置,請在「Pair devices over Wi-Fi」彈出式視窗中選取「Pair device with pairing code」。在裝置上選取「使用配對碼配對」,並記下六位數的配對碼。當裝置出現在「Pair devices over Wi-Fi」視窗後,您可以選取「Pair」,接著輸入裝置中顯示的六位數程式碼。
-
-
配對完成後,您可以試試將應用程式部署至裝置。
如要在工作站上配對其他裝置或移除這部裝置,請前往裝置的「Wireless debugging」功能,接著在「Paired devices」底下輕觸工作站名稱,然後選取「Forget」。
-
如要快速開啟和關閉無線偵錯功能,您可以使用「Quick settings developer」圖塊進行「無線偵錯」(位於「Developer Options」>「Quick settings developer」圖塊)。
使用指令列進行 Wi-Fi 連線
另一種方式是,在沒有 Android Studio 的情況下,可使用指令列連線至裝置,請按照下列步驟操作:
-
按照前述步驟啟用開發人員選項。
-
按照前述步驟啟用裝置的「Wireless debugging」功能。
-
在您的工作站上,開啟終端機視窗並前往
android_sdk/platform-tools
。 -
選取「Pair device with pairing code」,即可找到您的 IP 位址、通訊埠號碼和配對碼。記下裝置中顯示的 IP 位址、通訊埠號碼和配對碼。
-
在工作站的終端機上執行
adb pair ipaddr:port
。使用上述的 IP 位址和通訊埠號碼。 -
當系統提示時,輸入配對碼,如下所示。
解決無線連線問題
如果您無法以無線的方式連接裝置,請嘗試依照下列疑難排解步驟解決問題。
確認工作站和裝置是否符合必要條件
確認工作站和裝置符合本節開頭列出的必要條件。
檢查其他已知問題
以下列出目前無線偵錯功能 (使用 ADB 或 Android Studio) 的已知問題和解決方法:
-
無法連上 Wi-Fi:安全的 Wi-Fi 網路 (例如企業 Wi-Fi 網路) 可能會封鎖 P2P 連線,進而導致您無法透過 Wi-Fi 連線。請嘗試使用傳輸線或其他 (非公司) Wi-Fi 網路連線。使用
adb connect ip:port
透過 TCP/IP 進行無線連線 (在初始 USB 連線之後) 是另一個選項,如果可以使用非公司網路,這會是個不錯的選擇。 -
透過 Wi-Fi 使用
adb
功能有時會自動停止:如果裝置更改 Wi-Fi 網路或中斷網路連線,則可能會發生這個問題。如要解決這個問題,請重新連線至網路。 -
裝置在配對成功後未連線:
adb
會使用 mDNS 來探索並自動連線至已配對的裝置。如果網路或裝置設定不支援 mDNS,或已停用 mDNS,您就必須使用adb connect ip:port
手動連線至裝置。
在初始 USB 連線後,以無線方式連線至裝置 (僅適用於 Android 10 以下版本)
注意:這項工作流程也適用於 Android 11 (及以上版本),但請注意,這項流程也涉及透過實體 USB 進行的 *初始* 連線。
注意:下方的操作說明不適用於搭載 Android 10 (API 級別 29) 以下版本的 Wear 裝置。詳情請參閱「對 Wear OS 應用程式進行偵錯」指南。
adb
通常會透過 USB 與裝置通訊,但您也可以透過 Wi-Fi 網路使用 adb
。如要連線至搭載 Android 10 (API 級別 29) 以下版本的裝置,請透過 USB 進行以下初始步驟:
-
將您的 Android 裝置和
adb
主機電腦連上通用 Wi-Fi 網路。 - 使用 USB 傳輸線將裝置連接至主機電腦。
-
設定目標裝置以監聽通訊埠 5555 的 TCP/IP 連線:
adb tcpip 5555
- 拔除目標裝置的 USB 傳輸線。
- 找出 Android 裝置的 IP 位址。舉例來說,您可以在 Nexus 裝置上依序前往「設定」>「關於平板電腦」(或「關於手機」) >「狀態」>「IP 位址」找到 IP 位址。
-
依據 IP 位址連線到裝置:
adb connect device_ip_address:5555
-
確認主機電腦已連線至目標裝置:
$ adb devices List of devices attached device_ip_address:5555 device
注意:請注意,並非所有存取點都適合您;您可能需要使用能正確設定防火牆的存取點,以支援 adb
。
您的裝置現已連線至 adb
。
如果與裝置的 adb
連線中斷:
- 確認主機仍然與 Android 裝置連上相同的 Wi-Fi 網路。
-
再次執行
adb connect
步驟即可重新連線。 -
如果問題仍未解決,請重設
adb
主機:adb kill-server
從頭開始。
查詢裝置
在發出 adb
指令前,建議您先瞭解有哪些裝置執行個體已連線至 adb
伺服器。請使用 devices
指令產生已連結裝置的清單:
adb devices -l
依回應,adb
會針對每部裝置列印下列狀態資訊:
- 序號:由
adb
建立的字串,可透過通訊埠編號識別裝置。以下是序號範例:emulator-5554
- 狀態:裝置的連線狀態可能是下列其中一種:
offline
:裝置未連線至adb
或沒有回應。device
:裝置已連線至adb
伺服器。請注意,此狀態並不表示 Android 系統已完全啟動且正常運作,因為裝置在系統仍在開機期間就會連線至adb
。開機後,一般而言,是裝置處於運作的狀態。no device
:未連線至任何裝置。
- 說明:如果您加入
-l
選項,devices
指令會告訴您裝置為何。當您連結多部裝置時,這項資訊非常實用,方便您區分裝置。
以下範例顯示 devices
指令及其輸出內容。有三部裝置在執行中。清單中的前兩行是模擬器,而第三行是連接至電腦的硬體裝置。
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
未列出模擬器
adb devices
指令具有絕對大小寫指令,會讓執行模擬器不會在 adb devices
輸出的內容中顯示出來 (不過模擬器會顯示在桌面上)。如果符合下列所有條件,就會發生這個問題:
adb
伺服器並未執行。- 請搭配
-port
或-ports
選項使用emulator
指令,並在通訊埠編號介於 5554 與 5584 之間使用奇數編號。 - 您選擇的不明編號通訊埠未忙碌,因此指定通訊埠號碼可透過指定通訊埠號碼建立;或者,如果是忙碌,則模擬器會切換至其他符合 2 要求的連接埠。
- 模擬器啟動後,啟動了
adb
伺服器。
如要避免這種情況,其中一種方式是讓模擬器自行選擇通訊埠,且不會同時執行超過 16 個模擬器。或者,在使用 emulator
指令之前一律必須啟動 adb
伺服器,如下列範例所示。
範例 1:在下方的指令序列中,adb devices
指令會啟動 adb
伺服器,但不會顯示裝置清單。
停止 adb
伺服器,並依序顯示以下指令。如果是 AVD 名稱,請提供系統中有效的 AVD 名稱。如要取得 AVD 名稱清單,請輸入 emulator -list-avds
。emulator
指令位於 android_sdk/tools
目錄中。
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
範例 2:在下方的指令序列中,adb devices
會顯示裝置清單,因為 adb
伺服器會先啟動。
如要在 adb devices
輸出中查看模擬器,請停止 adb
服務器,然後在使用 emulator
命令之後和使用 adb devices
命令之前再次啟動它,如下所示:
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
如要進一步瞭解模擬器指令列選項,請參閱「指令列啟動選項」。
將指令傳送到特定裝置
如果多部裝置正在執行,您必須在發出 adb
指令時指定目標裝置。如要指定目標,請按照下列步驟操作:
- 使用
devices
指令取得目標的序號。 - 取得序號後,請使用
-s
選項和adb
指令來指定序號。- 如要發布許多
adb
指令,您可以將$ANDROID_SERIAL
環境變數設為包含序號。 - 如果您同時使用
-s
和$ANDROID_SERIAL
,-s
會覆寫$ANDROID_SERIAL
。
- 如要發布許多
在下列範例中,系統會取得連接的裝置清單,然後利用該裝置的序號安裝helloWorld.apk
:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
注意:如果有多個可用裝置但尚未指定目標裝置時,adb
就會顯示錯誤「adb: more than one device/emulator」。
如果您有多部裝置,但只有一部模擬器,請使用 -e
選項向模擬器傳送指令。如果有多部裝置,但只連接了一個硬體裝置,請使用 -d
選項將指令傳送至硬體裝置。
安裝應用程式
您可以使用 adb
方法在模擬器上安裝 APK,或使用 install
指令在連結的裝置上安裝 APK:
adb install path_to_apk
安裝測試 APK 時,您必須使用 install
指令的 -t
選項。如需詳細資訊,請參閱「-t
」。
如要安裝多個 APK,請使用 install-multiple
。如果您從 Play 管理中心下載應用程式特定裝置的所有 APK,並想在模擬器或實體裝置上安裝這些 APK,這項功能就非常實用。
如要進一步瞭解如何建立可在模擬器/裝置執行個體上安裝的 APK 檔案,請參閱「建構並執行應用程式」。
注意:如果您使用的是 Android Studio,則不需要直接使用 adb
在模擬器或裝置上安裝應用程式。而 Android Studio 會為您處理應用程式的封裝和安裝作業。
設定通訊埠轉送
使用 forward
指令設定任意通訊埠轉送功能,將特定主機通訊埠的要求轉送至裝置上的其他通訊埠。以下範例設定主機通訊埠 6100 轉送至裝置通訊埠 7100:
adb forward tcp:6100 tcp:7100
以下範例說明如何將主機通訊埠 6100 轉寄至 local:logd:
adb forward tcp:6100 local:logd
如果您想確認將哪些內容傳送到裝置上的特定通訊埠,這個方法就非常實用。系統會將所有收到的資料寫入系統記錄 Daemon,並顯示在裝置記錄中。
將檔案複製到裝置/從裝置複製檔案
使用 pull
和 push
指令在裝置之間複製檔案,或從裝置複製檔案。與 install
指令不同,後者只是將 APK 檔案複製到特定位置,而 pull
和 push
指令可讓您將任意目錄和檔案複製到裝置上的任何位置。
如要從裝置複製檔案或目錄及其子目錄,請按照下列步驟操作:
adb pull remote local
如要將檔案或目錄及其子目錄複製到裝置,請按照下列步驟操作:
adb push local remote
將 local
和 remote
替換成開發機器 (本機) 和裝置上 (遠端) 的目標檔案/目錄的路徑。例如:
adb push myfile.txt /sdcard/myfile.txt
停止 ADB 伺服器
在某些情況下,您可能需要終止 adb
伺服器程序並重新啟動,才能解決問題。舉例來說,如果 adb
沒有回應指令,就可能發生這種情況。
如要停止 adb
伺服器,請使用 adb kill-server
指令。接著,您可以發出任何其他 adb
指令,重新啟動伺服器。
發出 ADB 指令
使用下列指令,透過開發機器或指令碼中的指令列發出 adb
指令:
adb [-d | -e | -s serial_number] command
如果只有一個執行中的模擬器或僅一部裝置連線,預設傳送 adb
指令到該裝置。如果同時執行多個模擬器和/或多個裝置,則必須使用 -d
、-e
或 -s
選項,指定指令的目標裝置。
您可以使用下列指令,查看所有支援 adb
指令的詳細清單:
adb --help
問題殼層指令
您可以使用 shell
指令透過 adb
發出裝置指令,或是啟動互動式殼層。如要發出單一指令,請使用 shell
指令,如下所示:
adb [-d |-e | -s serial_number] shell shell_command
如要在裝置上啟動互動式殼層,請使用 shell
指令,如下所示:
adb [-d | -e | -s serial_number] shell
如要結束互動式殼層,請按下 Control+D
或輸入 exit
。
Android 提供了大多數常見的 Unix 指令列工具。如需可用工具清單,請使用下列指令:
adb shell ls /system/bin
大多數指令可透過 --help
引數取得說明,許多殼層指令是由 toybox 提供。如要取得所有玩具方塊指令的一般問題,請前往 toybox --help
。
如果採用 Android Platform Tools 23 以上版本,adb
會透過與 ssh(1)
指令相同的方式處理引數。這項變更修正了指令插入的許多問題,現在可安全地執行含有殼層中繼字元的指令,例如 adb install Let\'sGo.apk
。這項變更代表所有包含殼層中繼字元的指令都能解讀。
舉例來說,adb shell setprop key 'two words'
指令現為錯誤,因為本機殼層會套用引號,且裝置顯示 adb shell setprop key two words
。為了讓指令正常運作,請針對本機殼層加上兩次引用兩次,一次用於遠端殼層,就像使用 ssh(1)
一樣。舉例來說,adb shell setprop key "'two words'"
可運作,是因為本機殼層會採用外層引號,而裝置仍會看到內層引號:setprop key 'two words'
。您也可以使用轉義,但通常兩次引號會比較簡單。
另請參閱「Logcat 指令列工具」,以便監控系統記錄。
呼叫活動管理員
在 adb
殼層中,您可以透過活動管理員 (am
) 工具發出指令,以執行各種系統動作,例如啟動活動、停止停止程序、廣播意圖、修改裝置螢幕等設定。
在殼層中,am
語法如下:
am command
您也可以在不輸入遠端殼層的情況下,直接從 adb
發出活動管理員指令。例如:
adb shell am start -a android.intent.action.VIEW
指令 | 說明 |
---|---|
start [options] intent
|
啟動 intent 指定的 Activity 。請參閱「意圖引數規格」。 選項如下:
|
startservice [options] intent
|
啟動 intent 指定的 Service 。請參閱「意圖引數規格」。 選項如下:
|
force-stop package
|
強制停止與 package 相關聯的所有程序。 |
kill [options] package
|
終止與 package 相關聯的所有程序。這個指令只會終止可以安全終止,且不會影響使用者體驗的程序。選項如下:
|
kill-all
|
停止所有背景程序。 |
broadcast [options] intent
|
發送廣播意圖。 請參閱「意圖引數規格」。 選項如下:
|
instrument [options] component
|
透過 Instrumentation 執行個體開始監控。目標 component 通常是 test_package/runner_class 的形式。選項如下:
|
profile start process file
|
在 process 啟動分析器,將結果寫入 file 。 |
profile stop process
|
停止 process 中的分析器。 |
dumpheap [options] process file
|
傾印 process 的堆積,寫入 file 。選項如下:
|
set-debug-app [options] package
|
將應用程式 package 設為偵錯。選項如下:
|
clear-debug-app
|
清除 set-debug-app 中用於偵錯的套件。 |
monitor [options]
|
開始監控當機或 ANR 情形。 選項如下:
|
screen-compat {on | off} package
|
控制 package 的螢幕相容性模式。 |
display-size [reset | widthxheight]
|
覆寫裝置的顯示大小。這個指令可以在有大螢幕的裝置上模擬小螢幕解析度,反之亦然,藉此針對不同螢幕大小測試應用程式,反之亦然。 範例: |
display-density dpi
|
覆寫裝置的顯示密度。這個指令可以使用低密度螢幕模擬高密度螢幕環境,反之亦然,藉此針對不同的螢幕密度測試應用程式。 範例: |
to-uri intent
|
將指定的意圖規格列印為 URI。 請參閱「意圖引數規格」。 |
to-intent-uri intent
|
將指定的意圖規格列印為 intent: URI。請參閱「意圖引數規格」。 |
意圖引數規格
如果是需要 intent
引數的活動管理員指令,您可以透過以下選項指定意圖:
呼叫檔案包管理員 (pm
)
在 adb
殼層中,您可以使用套件管理員 (pm
) 工具發出指令,對裝置上安裝的應用程式套件執行動作及查詢查詢。
在殼層中,pm
語法如下:
pm command
您也可以在不輸入遠端殼層的情況下,直接從 adb
發出套件管理員指令。例如:
adb shell pm uninstall com.example.MyApp
指令 | 說明 |
---|---|
list packages [options] filter
|
列印所有套件,包括只有套件名稱包含 filter 文字的套件。選項:
|
list permission-groups
|
列印所有已知的權限群組。 |
list permissions [options] group
|
列印所有已知的權限,但僅限 group 中的權限。選項:
|
list instrumentation [options]
|
列出所有測試套件。 選項:
|
list features
|
列印系統的所有功能。 |
list libraries
|
列印目前裝置支援的所有程式庫。 |
list users
|
列印系統的所有使用者。 |
path package
|
列印指定 package 的 APK 路徑。 |
install [options] path
|
將套件 (由 path 指定) 安裝至系統。選項:
|
uninstall [options] package
|
從系統中移除套件。 選項:
|
clear package
|
刪除與套件相關聯的所有資料。 |
enable package_or_component
|
啟用指定的套件或元件 (以「套件/類別」寫入)。 |
disable package_or_component
|
停用指定的套件或元件 (以「套件/類別」寫入)。 |
disable-user [options] package_or_component
|
選項:
|
grant package_name permission
|
將權限授予應用程式。在搭載 Android 6.0 (API 層級 23) 以上版本的裝置中,該權限可以是應用程式資訊清單中宣告的任何權限。在搭載 Android 5.1 (API 層級 22) 以下版本的裝置上,必須是由應用程式定義的選用權限。 |
revoke package_name permission
|
撤銷應用程式的權限。在搭載 Android 6.0 (API 層級 23) 以上版本的裝置中,權限可以是應用程式資訊清單中宣告的任何權限。在搭載 Android 5.1 (API 層級 22) 以下版本的裝置上,必須是由應用程式定義的選用權限。 |
set-install-location location
|
變更預設安裝位置。位置值:
注意:這只會用於偵錯;因為這樣會導致應用程式無法運作,以及其他不良行為。 |
get-install-location
|
傳回目前的安裝位置。傳回值︰
|
set-permission-enforced permission [true | false]
|
指定是否要強制執行指定權限。 |
trim-caches desired_free_space
|
請快取快取檔案以達到指定的免費空間。 |
create-user user_name
|
以指定的 user_name 建立新的使用者,列印該使用者的新使用者 ID。 |
remove-user user_id
|
移除具備指定 user_id 的使用者,並刪除與該使用者相關聯的所有資料 |
get-max-users
|
列印裝置支援的使用者人數上限。 |
get-app-links [options] [package]
|
列印指定 package 的網域驗證狀態;如未指定,則列印所有套件的網域驗證狀態。狀態碼定義如下:
選項如下:
|
reset-app-links [options] [package]
|
重設指定套件的網域驗證狀態;如未指定,則會重設所有套件的網域驗證狀態。
選項如下:
|
verify-app-links [--re-verify] [package]
|
播送指定 package 的驗證要求;如未指定,則會播送所有套件的驗證要求。只有在套件先前未記錄回應時,才會傳送要求。
|
set-app-links [--package package] state domains
|
手動設定套件的網域狀態。套件必須將網域宣告為 autoVerify,這項指令才能運作。此指令不會針對無法套用的網域回報失敗。
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
手動設定套件的主機使用者選取狀態。套件必須宣告網域,這項指令才能運作。此指令不會針對無法套用的網域回報失敗。
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
手動設定套件的主機使用者選取狀態。套件必須宣告網域,這項指令才能運作。此指令不會針對無法套用的網域回報失敗。
|
set-app-links-allowed --user user_id [--package package] allowed
|
切換套件的自動驗證連結處理設定。
|
get-app-link-owners --user user_id [--package package] domains
|
針對某位使用者,根據由低至高的優先順序列印特定網域的擁有者。
|
呼叫裝置政策管理員 (dpm
)
為了協助您開發及測試裝置管理應用程式,請向裝置政策管理員 (dpm
) 工具發出指令。這項工具可讓您控管使用中的管理員應用程式,或變更裝置上的政策狀態資料。
在殼層中,dpm
語法如下:
dpm command
您也可以在不輸入遠端殼層的情況下,直接從 adb
發出裝置政策管理員指令:
adb shell dpm command
指令 | 說明 |
---|---|
set-active-admin [options] component
|
將 component 設為有效的管理員。 選項如下:
|
set-profile-owner [options] component
|
將 component 設為有效的管理員,且其套件設為現有使用者的設定檔擁有者。 選項如下:
|
set-device-owner [options] component
|
將 component 設為有效的管理員,且其套件設為裝置擁有者。 選項如下:
|
remove-active-admin [options] component
|
停用有效管理員。應用程式必須在資訊清單中宣告 android:testOnly 。這個指令也會移除裝置和設定檔擁有者。選項如下:
|
clear-freeze-period-record
|
清除裝置先前設定的系統 OTA 更新凍結記錄。這有助於在開發可管理凍結期的應用程式時,避免裝置排程的限制。請參閱「管理系統更新」。 支援搭載 Android 9.0 (API 層級 28) 以上版本的裝置。 |
force-network-logs
|
強制系統準備任何現有的網路記錄供 DPC 擷取。如果有連線或 DNS 記錄,DPC 會收到 onNetworkLogsAvailable() 回呼。請參閱「網路活動記錄」。這個指令有頻率限制。支援搭載 Android 9.0 (API 層級 28) 以上版本的裝置。 |
force-security-logs
|
強制系統向 DPC 提供任何現有的安全性記錄。如果有可用的記錄檔,DPC 會收到 onSecurityLogsAvailable() 回呼。請參閱「記錄企業裝置活動」。這個指令有頻率限制。支援搭載 Android 9.0 (API 層級 28) 以上版本的裝置。 |
擷取螢幕截圖
screencap
指令是殼層公用程式,用於擷取裝置螢幕的螢幕截圖。
在殼層中,screencap
語法如下:
screencap filename
如要透過指令列使用 screencap
,請輸入以下內容:
adb shell screencap /sdcard/screen.png
以下是螢幕截圖工作階段範例,使用 adb
殼層擷取螢幕截圖,並使用 pull
指令從裝置下載檔案:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
錄製影片
screenrecord
指令是殼層公用程式,用於記錄搭載 Android 4.4 (API 層級 19) 以上版本的裝置螢幕。公用程式會將螢幕活動記錄成 MPEG-4 檔案。您可以使用這個檔案製作宣傳或訓練影片,或進行偵錯和測試。
在殼層中使用下列語法:
screenrecord [options] filename
如要透過指令列使用 screenrecord
,請輸入以下內容:
adb shell screenrecord /sdcard/demo.mp4
按下 Control+C 鍵停止螢幕錄影。否則,系統將在三分鐘後自動停止錄製,或是設定 --time-limit
所設定的時間限制。
如要開始錄製裝置螢幕畫面,請執行 screenrecord
指令錄製影片。接著,執行 pull
指令,將影片從裝置下載至主機電腦。以下是錄製工作階段的範例:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
screenrecord
公用程式可以依照您要求的任何支援解析度和位元率記錄影片,同時保留裝置的螢幕長寬比。根據公用程式會記錄原生顯示解析度和螢幕方向,預設最長可達三分鐘。
screenrecord
公用程式的限制:
- 影片檔案不會錄製音訊。
- 搭載 Wear OS 的裝置無法使用錄影功能。
- 部分裝置可能無法以原始顯示解析度錄製影片。如果無法順利錄製螢幕畫面,請嘗試調降螢幕解析度。
- 無法在錄製期間旋轉畫面。如果螢幕在錄影時旋轉,某些螢幕畫面會在錄製中遭截斷。
選項 | 說明 |
---|---|
--help
|
顯示指令語法和選項 |
--size widthxheight
|
設定影片大小:1280x720 。預設值為裝置的原始顯示解析度 (如支援),預設值為 1280x720。為達到最佳效果,請使用裝置進階視訊編碼 (AVC) 編碼器支援的尺寸。 |
--bit-rate rate |
設定影片的影片位元率 (以百萬位元/秒為單位)。預設值為 20 Mbps。如要提高視訊品質,您可以提高位元率,但產生較大的電影檔案。以下範例將錄音位元率設為 6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
設定時間上限 (以秒為單位)。預設值為 180 (3 分鐘)。 |
--rotate |
將輸出旋轉 90 度。這個功能是實驗性質。 |
--verbose |
在指令列畫面上顯示記錄資訊。如未設定這個選項,公用程式不會在執行過程中顯示任何資訊。 |
讀取應用程式的 ART 設定檔
從 Android 7.0 (API 層級 24) 開始,Android 執行階段 (ART) 會針對已安裝的應用程式收集執行設定檔,藉此改善應用程式效能。建議您檢查收集到的設定檔,瞭解系統頻繁執行哪些方法,以及應用程式啟動時採用的類別。
注意:您必須具備檔案系統的根目錄存取權 (例如在模擬器上),才能擷取執行作業設定檔檔案名稱。
如要產生設定檔資訊的文字格式,請使用下列指令:
adb shell cmd package dump-profiles package
如要擷取產生的檔案,請使用:
adb pull /data/misc/profman/package.prof.txt
重設測試裝置
在多個測試裝置上測試應用程式時,建議您在測試期間重設裝置,例如移除使用者資料並重設測試環境。您可以使用 testharness
adb
殼層指令(如下所示)將搭載 Android 10 (API 層級 29) 以上版本的測試裝置恢復原廠設定。
adb shell cmd testharness enable
使用 testharness
還原裝置時,裝置會自動備份 RSA 金鑰,讓金鑰永久傳輸至永久位置中的工作站。也就是說,裝置重設完畢後,工作站就可以繼續偵錯及發出 adb
指令,而不必手動註冊新的金鑰。
此外,為了簡化應用程式測試程序,請使用 testharness
還原裝置,並變更下列裝置設定:
- 裝置已完成特定系統設定,因此不會顯示初始裝置的設定精靈。 也就是說,裝置會進入可快速安裝、偵錯及測試應用程式的狀態。
- 設定︰
- 停用螢幕鎖定功能。
- 停用緊急警報。
- 停用帳戶的自動同步功能。
- 停用自動系統更新。
- 其他:
- 停用預先安裝的安全性應用程式。
如果應用程式需要偵測及調整 testharness
指令的預設設定,請使用 ActivityManager.isRunningInUserTestHarness()
。
SQLite
sqlite3
會啟動 sqlite
指令列工具來檢查 SQLite 資料庫。包含 .dump
等指令可用來列印資料表的內容,.schema
則可用來列印現有資料表的 SQL CREATE
陳述式。您也可以透過指令列執行 SQLite 指令,如下所示:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
注意:您必須具備檔案系統的根目錄存取權 (例如在模擬器上),才能存取 SQLite 資料庫。
詳情請參閱 sqlite3
指令列說明文件。
ADB USB 後端
ADB 伺服器可以透過兩個後端與 USB 堆疊互動。它可以使用 OS (Windows、Linux 或 macOS) 的原生後端,也可以使用 libusb
後端。部分功能 (例如 attach
、detach
和 USB 速度偵測) 僅適用於使用 libusb
後端的情況。
您可以使用 ADB_LIBUSB
環境變數選擇後端。如果未設定,adb 會使用預設後端。預設行為會因作業系統而異。自 ADB 34 版起,系統預設會在所有作業系統上使用 liubusb
後端,但 Windows 會預設使用原生後端。如果已設定 ADB_LIBUSB
,則會決定是否使用原生後端或 libusb
。如要進一步瞭解 ADB 環境變數,請參閱 adb 手動頁面。
ADB mDNS 後端
ADB 可使用多點傳送 DNS 通訊協定,自動連線至伺服器和裝置。ADB 伺服器隨附兩個後端:Bonjour (Apple 的 mdnsResponseer) 和 Openscreen。
Bonjour 後端需要在主機上執行 Daemon。在 macOS 上,Apple 內建的守護程序一律會執行,但在 Windows 和 Linux 上,使用者必須確保 mdnsd
守護程序已啟用並執行。如果指令 adb mdns check
傳回錯誤,表示 ADB 正在使用 Bonjour 後端,但沒有 Bonjour 守護程序在執行。
Openscreen 後端不需要在電腦上執行 Daemon。自 ADB v35 起,macOS 即可支援 Openscreen 後端。自 ADB v34 起,系統支援 Windows 和 Linux。
根據預設,ADB 會使用 Bonjour 後端。您可以使用 ADB_MDNS_OPENSCREEN
環境變數 (設為 1
或 0
) 變更這項行為。詳情請參閱 ADB 手動頁面。