adb push命令传文件到手机_Android调试桥(adb)
歡迎關注公眾號 學習資料不會少
Android 調試橋
Android 調試橋 (adb) 是一個通用命令行工具,其允許您與模擬器實例或連接的 Android 設備進行通信。它可為各種設備操作提供便利,如安裝和調試應用,并提供對 Unix shell(可用來在模擬器或連接的設備上運行各種命令)的訪問。該工具作為一個客戶端-服務器程序,包括三個組件:
●?客戶端,該組件發送命令??蛻舳嗽陂_發計算機上運行。您可以通過發出 adb 命令從命令行終端調用客戶端。
●?后臺程序,該組件在設備上運行命令。后臺程序在每個模擬器或設備實例上作為后臺進程運行。
●?服務器,該組件管理客戶端和后臺程序之間的通信。服務器在開發計算機上作為后臺進程運行。
您可以在 android_sdk/platform-tools/ 中找到 adb 工具。
adb 的工作方式
啟動一個 adb 客戶端時,此客戶端首先檢查是否有已運行的 adb 服務器進程。如果沒有,它將啟動服務器進程。當服務器啟動時,它與本地 TCP 端口 5037 綁定,并偵聽從 adb 客戶端發送的命令—所有 adb 客戶端均使用端口 5037 與 adb 服務器通信。
然后,服務器設置與所有運行的模擬器/設備實例的連接。它通過掃描 5555 到 5585 之間(模擬器/設備使用的范圍)的奇數號端口查找模擬器/設備實例。服務器一旦發現 adb 后臺程序,它將設置與該端口的連接。請注意,每個模擬器/設備實例將獲取一對按順序排列的端口 — 用于控制臺連接的偶數號端口和用于 adb 連接的奇數號端口。例如:
模擬器 1,控制臺:5554
模擬器 1,adb:5555
模擬器 2,控制臺:5556
模擬器 2,adb:5557
以此類推...
如上所示,在端口 5555 與 adb 連接的模擬器實例與偵聽端口 5554 的控制臺的實例相同。
當服務器已設置與所有模擬器實例的連接后,您可以使用 adb 命令訪問這些實例。由于服務器管理與模擬器/設備實例的連接,并處理來自多個 adb 客戶端的命令,因此,您可以從任意客戶端(或從某個腳本)控制任意模擬器/設備實例。
在您的設備上啟用 adb 調試
要在通過 USB 連接的設備上使用 adb,您必須在設備系統設置中啟用 USB debugging(位于 Developer options 下)。
在運行 Android 4.2 及更高版本的設備上,Developer options 屏幕默認情況下處于隱藏狀態。如需將其顯示出來,請轉到 Settings > About phone 并點按 Build number 七次。返回上一屏幕,在底部可以找到 Developer options。
在某些設備上,Developer options 屏幕所在的位置或命名方式可能有所不同。
現在,您可以將設備與 USB 連接??梢詮?android_sdk/platform-tools/ 目錄執行 adb devices來驗證設備是否連接。如果已連接,您將看到設備名稱以“設備”形式列示。
●?注:當您連接運行 Android 4.2.2 或更高版本的設備時,系統將顯示一個對話框,詢問您是否接受允許在這臺計算機上調試的 RSA 密鑰。這種安全機制可以保護用戶設備,因為它可以確保只有在您能夠解鎖設備并確認對話框的情況下才能執行 USB 調試和其他 ADB 命令。
如需了解有關通過 USB 連接到設備的詳細信息,請參閱在硬件設備上運行應用。
通過 WLAN 連接到設備
一般情況下,通過 USB 使用 adb。不過,也可以按照下面的說明通過 WLAN 使用它。
1.將 Android 設備和 adb 主計算機連接到這兩者都可以訪問的常用 WLAN 網絡。請注意,并非所有訪問點均適用;您可能需要使用已正確配置防火墻的訪問點以支持 adb 的訪問點。
●?注:如果您嘗試連接到 Android Wear 設備,則通過關閉與其連接的手機的藍牙強制將它連接到 WLAN。
2.使用 USB 電纜將設備連接到主計算機。
3.設置目標設備以偵聽端口 5555 上的 TCP/IP 連接。
$ adb tcpip 5555
4.從目標設備斷開 USB 電纜連接。
5.查找 Android 設備的 IP 地址。例如,在 Nexus 設備上,您可以通過訪問 Settings > About tablet(或 About phone) > Status > IP address 查找 IP 地址。或者,在 Android Wear 設備上,您可以通過訪問 Settings > Wi-Fi Settings > Advanced > IP address 查找 IP 地址。
6.連接至設備,通過 IP 地址識別此設備。
$ adb connect device_ip_address
7.請確認您的主計算機已連接至目標設備:
$ adb devicesList of devices attacheddevice_ip_address:
5555 device
現在,您可以開始操作了!
如果 adb 連接丟失:
1.請確保您的主機仍與您的 Android 設備連接到同一個 WLAN 網絡。
2.通過再次執行 adb connect 步驟重新連接。
3.如果無法連接,則重置 adb 主機:
adb kill-server
然后,從頭開始操作。
查詢設備
在發出 adb 命令之前,知道哪些模擬器/設備實例已連接到 adb 服務器會很有幫助。您可以使用 devices 命令生成已連接的模擬器/設備的列表:
adb devices
在響應時,adb 針對每個實例輸出此狀態信息:
● 序列號 — 一個由 adb 創建的字符串,用于通過其控制臺端口號唯一標識模擬器/設備實例。序列號的格式為 type-console-port。下面是一個序列號示例:emulator-5554
●?狀態 — 實例的連接狀態可為下列狀態之一:
? ? ◎ offline — 實例未連接到 adb 或不響應。
? ? ◎ device — 實例現在已連接到 adb 服務器。請注意,此? ? ? ? ?狀態并不表示 Android 系統已完全啟動且可以運行,? ? ? ? ? ?因為在此實例連接到 adb 時系統仍在啟動。不過,在? ? ? ? ? 啟動后,這將是模擬器/設備實例的正常運行狀態。
? ? ◎ no device — 未連接模擬器/設備。
輸出的格式類似如下:
List of devices attached
serial_number state
以下示例向您展示了 devices 命令及其輸出:
adb devices
List of devices attached
emulator-5554 ?device
emulator-5556 ?device
emulator-5558 ?device
將命令發送至特定設備
如果多個模擬器/設備實例正在運行,在發出 adb 命令時您必須指定一個目標實例。為此,請在命令中使用 -s 選項。以下是 -s 選項的用法:
adb -s serial_number command
如上所示,您使用由 adb 分配的序列號為命令指定目標實例。您可使用 devices 命令獲取正在運行的模擬器/設備實例的序列號。例如:
adb -s emulator-5556 install helloWorld.apk
●?注:如果在多個設備可用時您未指定目標模擬器/設備實例就發出命令,那么 adb 將生成一個錯誤。
如果您有多個設備可用(硬件或模擬設備),但只有一個設備是模擬器,則使用 -e 選項將命令發送至該模擬器。同樣,如果有多個設備,但只連接了一個硬件設備,則使用 -d 選項將命令發送至該硬件設備。
安裝應用
您可以使用 adb 從開發計算機復制應用,并將其安裝到模擬器/設備實例上。為此,請使用 install命令。使用此命令,您必須指定您要安裝的 APK 文件的路徑:
adb install path_to_apk
如需有關如何創建可在模擬器/設備實例上安裝的 APK 文件的詳細信息,請參閱構建和運行您的應用。
請注意,如果使用 Android Studio,則無需直接使用 adb(或 aapt)在模擬器/設備上安裝您的應用。而是由 Android Studio 為您處理應用的打包和安裝。
設置端口轉發
您可以使用 forward 命令設置任意端口轉發 — 將對特定主機端口的請求轉發到模擬器/設備實例上的其他端口。下面向您介紹如何設置主機端口 6100 到模擬器/設備端口 7100 的轉發:
adb forward tcp:6100 tcp:7100
您也可以使用 adb 設置傳輸到指定的抽象 UNIX 網域套接字的轉發,如下所示:
adb forward tcp:6100 local:logd
將文件復制到設備/從設備復制文件
您可以使用 adb 命令 pull 和 push 將文件復制到模擬器/設備實例或從其中復制文件。與 install命令不同(其僅將 APK 文件復制到特定位置),pull 和 push 命令允許您將任意目錄和文件復制到模擬器/設備實例中的任意位置。
要從模擬器或設備復制文件或目錄(及其子目錄),請使用
adb pull remote local
要將文件文件或目錄(及其子目錄)復制到模擬器或設備,請使用
adb push local remote
在上述命令中,local 和 remote 指的是開發計算機(本地)和模擬器/設備實例(遠程)上目標文件/目錄的路徑。例如:
adb push foo.txt /sdcard/foo.txt
停止 adb 服務器
在某些情況下,您可能需要終止 adb 服務器進程,然后重啟它以解決問題(例如,如果 adb 不響應命令)。
要停止 adb 服務器,請使用 adb kill-server 命令。然后,您可以通過發出任意其他 adb 命令重啟服務器。
adb 命令參考
您可以在開發計算機上從命令行發出 adb 命令,或通過腳本發出。用法如下:
adb [-d|-e|-s serial_number] command
如果只有一個模擬器在運行或只連接了一個設備,則默認情況下將 adb 命令發送至該設備。如果有多個模擬器在運行和/或連接了多個設備,您需要使用 -d、-e 或 -s 選項指定應向其發送命令的目標設備。
下表列出了所有支持的 adb 命令并解釋其含義和用法。
表
1. 可用的 adb 命令
目標設備 | -b | 將 adb 命令發送至唯一連接的 USB 設備。 | 如果連接了多個 USB 設備,將返回錯誤。 |
-e | 將 adb 命令發送至唯一運行的模擬器實例。? | 如果有多個模擬器實例在運行,將返回錯誤。?? | |
-s?serial_number | 將 adb 命令發送至以其 adb 分配的序列號命名的特定模擬器/設備實例(如“emulator-5556”)。 | 請參閱將命令發送至特定模擬器/設備實例。? ?? | |
常規 | devices?? | 輸出所有連接的模擬器/設備實例的列表。 | ?如需了解詳細信息,請參閱查詢模擬器/設備實例。 |
help | 輸出支持的 adb 命令的列表。?? | _ | |
version | 輸出 adb 版本號。? ??? | ||
調試 | logcat?[option] [filter-specs]? | 將日志數據輸出到屏幕。? ? ?? | |
bugreport | 將 dumpsys、dumpstate 和 logcat 數據輸出到屏幕,以用于報告錯誤。?? | ||
jdwp | 輸出給定設備上可用的 JDWP 進程的列表。 | 您可以使用 forward jdwp:pid 端口轉發規范以連接到特定的 JDWP 進程。例如: | |
數據 | ?install?path_to_apk | 將 Android 應用(使用 APK 文件的完整路徑表示)推送到模擬器/設備。 | |
pull?remote?local | 從模擬器/設備實例將指定文件復制到開發計算機。? ? ? ? ? | ||
push?local?remote | 從開發計算機將指定文件復制到模擬器/設備實例。? ? ? ? ? | ||
端口和網絡連接 | ?forward?local?remote | 將來自指定本地端口的套接字連接轉發到模擬器/設備實例上的指定遠程端口。 | 端口規范可以使用以下架構: ●tcp:port_number ● local:unix_domain_socket ●dev:character_device_name ●jdwp:pid |
ppp?tty?[parm]...?? | 通過 USB 運行 PPP。 ●tty — 用于 PPP 流的 tty。例如,dev:/dev/omap_csmi_ttyl。 ●[parm]... — 零個或多個 PPP/PPPD 選項,如 defaultroute、local、notty等。 請注意,不得自動啟動 PPP 連接。 | ||
腳本 | ?get-serialno | 輸出 adb 實例序列號字符串。 | 如需了解詳細信息,請參閱查詢模擬器/設備實例。? ?? |
get-state | 輸出模擬器/設備實例的adb狀態。 | 如需了解詳細信息,請參閱查詢模擬器/設備實例。? ? | |
wait-for-device | 阻止執行,直至設備處于在線狀態,即直至實例狀態為 device。 | 如 您可以將此命令附加到其他 adb 命令,在此情況下,adb 在發出其他命令前將處于等待狀態,直至模擬器/設備實例已連接。下面是一個示例:adb wait-for-device shell getprop 請注意,此命令不會使 adb 等待整個系統已完全啟動。因此,您不應將其追加到需要系統完全啟動的其他命令。例如,install 需要使用 Android 軟件包管理器,其僅在系統完全啟動后才可用。如下命令adb wait-for-device install app.apk | |
服務器 | start-server | 檢查 adb 服務器進程是否在運行,如果未運行則啟動它。? ??? | _ |
kill-server | 終止 adb 服務器進程。 | ||
Shell | shell | 在目標模擬器/設備實例中啟動遠程 shell。 | 如需了解詳細信息,請參閱發出 shell 命令。? ?? |
shell?shell_command? | 在目標模擬器/設備實例中發出 shell 命令,然后退出遠程 shell。? ?? | 如需了解詳細信息,請參閱發出 shell 命令。?? |
發出 shell 命令
您可以使用 shell 命令通過 adb 發出設備命令,可以進入或不進入模擬器/設備實例上的 adb 遠程 shell。要在不進入遠程 shell 的情況下發出一個命令,請使用如下 shell 命令:
adb [-d|-e|-s serial_number] shell shell_command
或者,使用如下命令進入模擬器/設備實例上的遠程 shell:
adb [-d|-e|-s serial_number] shell
當您準備退出遠程 shell 時,按 Control + D 或輸入 exit。
shell 命令二進制文件存儲在模擬器或設備的文件系統中,其路徑為 /system/bin/。
調用 Activity Manager (am)
在 adb shell 中,您可以使用 Activity Manager (am) 工具發出命令以執行各種系統操作,如啟動 Activity、強行停止進程、廣播 intent、修改設備屏幕屬性及其他操作。在 shell 中,此語法為:
am command
您也可以直接從 adb 發出 Activity Manager 命令,無需進入遠程 shell。例如:
adb shell am start -a android.intent.action.VIEW
表 2. 可用的 Activity Manager 命令
intent 參數的規范
調用軟件包管理器 (pm)
在 adb shell 中,您可以使用軟件包管理器 (pm) 工具發出命令,以對設備上安裝的應用軟件包進行操作和查詢。在 shell 中,此語法為:
pm command
您也可以直接從 adb 發出軟件包管理器命令,無需進入遠程 shell。例如:
adb shell pm uninstall com.example.MyApp
表 3. 可用的軟件包管理器命令。
進行屏幕截圖
screencap 命令是一個用于對設備顯示屏進行屏幕截圖的 shell 實用程序。在 shell 中,此語法為:
screencap filename
要從命令行使用 screencap,請輸入以下命令:
$ adb shell screencap /sdcard/screen.png
以下屏幕截圖會話示例向您展示使用 adb shell 捕獲屏幕截圖,并使用 pull 命令從設備下載此文件:
$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit$ adb pull /sdcard/screen.png
錄制視頻
screenrecord 命令是一個用于錄制設備(運行 Android 4.4(API 級別 19)及更高版本)顯示屏的 shell 實用程序。此實用程序將屏幕 Activity 錄制到 MPEG-4 文件。
注:音頻不與視頻文件一起錄制。
開發者可以使用此文件創建宣傳視頻或培訓視頻。在 shell 中,此語法為:
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 實用程序的一些已知限制,您在使用時應注意:
● 某些設備可能無法以它們的原生顯示分辨率進行錄制。如果在錄制屏幕時出現問題,請嘗試使用較低的屏幕分辨率。
●?不支持在錄制時旋轉屏幕。如果在錄制期間屏幕旋轉了,則部分屏幕的錄制將被切斷。
表 4.?screenrecord 選項
讀取應用的 ART 配置文件
從 Android 7.0(API 級別 24)開始,Android Runtime (ART) 會收集已安裝應用的執行配置文件,其可用于優化應用性能。您可能想要檢查收集的配置文件,以了解在應用啟動期間,系統決定頻繁執行哪些方法和使用哪些類。
要生成配置文件信息的文本表單,請使用以下命令:
$ adb shell cmd package dump-profiles package
要檢索生成的文件,請使用:
$ adb pull /data/misc/profman/package.txt
其他 shell 命令
如需所有可用 shell 程序的列表,請使用以下命令:
adb shell ls /system/bin
大多數命令都提供幫助說明。
表 5 列出了一些比較常用的 adb shell 命令。
表 5. 其他一些 adb shell 命令
往期精彩文章
喜報來了!凡貓學員薪資最高16K!
金融行業軟件測試介紹
2020年為什么大家都開始學習自動化測試?
學習測試開發前 你需要掌握的python 代碼水平
1萬+軟件測試人員都在學的精品課程免費送,大家別錯過
總結
以上是生活随笔為你收集整理的adb push命令传文件到手机_Android调试桥(adb)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java面试 泛型_Java面试题五:
- 下一篇: itest英语考试bug_itest(爱