『與善仁』Appium基礎 — 4、常用ADB命令(一)

在上一篇文章中說明了ADB命令的使用方式:

  1. 使用ADB命令的前提是保證手機或者模擬器和電腦是連接狀態。
  2. 使用adb connect 127.0.0.1:+埠號命令,進行鏈接。

本篇文章詳細說明一下常用ADB命令的操作。

1、啟動和關閉ADB服務

在某些情況下,可能需要終止然後再啟動服務端進程,例如ADB不響應命令的時候,可以通過重啟解決問題。

開啟命令行終端執行命令:

  1. 啟動ADB服務,ADB命令: adb start-server
  2. 關閉ADB服務,ADB命令: adb kill-server

演示:

1)啟動ADB服務

C:\Users\L>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

C:\Users\L>

提示:守護進程沒有開啟,現在通過5037埠開啟守護進程服務。

注意:

  • ADB命令默認綁定埠為5037 ,若埠被別的應用綁定則無法啟動ADB服務。
  • 一般無需手動執行此命令,在運行ADB命令時若發現adb server沒有啟動會自動調起。

2)關閉ADB服務

關閉ADB服務沒有任何提示。

image

2、查看ADB版本

ADB命令:adb version

C:\Users\L>adb version
Android Debug Bridge version 1.0.41
Version 29.0.6-6198805
Installed as F:\***\android-sdk-windows\platform-tools\adb.exe

C:\Users\L>

3、指定adb server的網路埠

ADB命令:adb -P <port> start-server(臨時換一個埠號開啟ADB服務)

默認埠為 5037。

C:\Users\L>adb -P 5039 start-server
* daemon not running; starting now at tcp:5039
* daemon started successfully

C:\Users\L>

提示:

  • netstat -ano查詢進程ID。
  • taskkill /f /t /im 進程名殺掉進程。
    如:taskkill /f /t /im nginx.exe

4、查詢已連接設備/模擬器

ADB命令:adb devices

前提:Android模擬器已開啟。

演示:

(1)直接執行adb devices命令

C:\Users\L>adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached


C:\Users\L>

從上面可以看到,如果我們沒有啟動ADB服務,且直接執行adb devices命令,會先自動幫我們開啟ADB服務,在執行adb devices命令,結果沒有查詢到已鏈接的模擬器。

(2)使用ADB服務鏈接Android模擬器

執行命令adb connect 127.0.0.1:21503(註:不同的模擬器的埠號不同)。

C:\Users\L> adb connect 127.0.0.1:21503
connected to 127.0.0.1:21503

C:\Users\L>

(3)再次執行adb devices命令,查詢已連接設備

C:\Users\L>adb devices
List of devices attached
127.0.0.1:21503 device


C:\Users\L>

我們就可以看到ADB服務已經鏈接的設備了

說明:

輸出格式為 [serialNumber] [state]

serialNumber即我們常說的SN碼,state有如下幾種:

  • offline:表示設備未連接成功或無響應。
  • device:設備已連接。注意這個狀態並不能標識 Android 系統已經完全啟動和可操作,在設備啟動過程中設備實例就可連接到ADB,但啟動完畢後系統才處於可操作狀態。
  • no device:沒有設備/模擬器連接。

常見異常輸出

  1. 沒有設備/模擬器連接成功。
    List of devices attached
    
  2. 設備/模擬器未連接到 adb 或無響應。
    List of devices attached
    cf264b8f	offline
    

5、獲取Android系統版本

ADB命令:adb shell getprop ro.build.version.release

演示:

C:\Users\L>adb shell getprop ro.build.version.release
7.1.2

C:\Users\L>

6、為命令指定目標設備

如果有多個設備/模擬器連接,則需要為命令指定目標設備。

參數 含義
-d 指定當前唯一通過 USB 連接的 Android 設備為命令目標
-e 指定當前唯一運行的模擬器為命令目標
-s <serialNumber> 指定相應serialNumber號的設備/模擬器為命令目標

在多個設備/模擬器連接的情況下較常用的是 -s <serialNumber> 參數,serialNumber可以通過 adb devices 命令獲取。如:

$ adb devices

List of devices attached
cf264b8f	device
emulator-5554	device
10.129.164.6:5555	device

輸出里的 cf264b8femulator-555410.129.164.6:5555 即為serialNumber

比如這時想指定 cf264b8f 這個設備來運行ADB命令獲取螢幕解析度:

adb -s cf264b8f shell wm size

又如想給 10.129.164.6:5555 這個設備安裝應用(這種形式的 serialNumber 格式為 <IP>:<Port>,一般為無線連接的設備或 Genymotion 等第三方 Android 模擬器):

adb -s 10.129.164.6:5555 install test.apk

遇到多設備/模擬器的情況均使用這幾個參數為命令指定目標設備

7、發送文件到手機

ADB命令:adb push 電腦端文件路徑\需要發送的文件(全名) /手機端存儲的路徑

提示

  • Android手機存儲卡的根目錄都是sdcard目錄。(固定死的)
  • 注意目錄中斜杠的方向。

示例

將桌面的test.txt文件發送到手機sdcard目錄下。

C:\Users\L>adb push C:\Users\L\Desktop\test.txt /sdcard
C:\Users\L\Desktop\test.txt: 1 file pushed, 0 skipped. 0.0 MB/s (36 bytes in 0.003s)

C:\Users\L>

提示:我們可以把文件直接拖拽到命令行終端中,該文件的路徑和文件名會自動生成。

我們再到Android模擬器中的文件管理器查看test.txt文件是否接收到。

image

打開文件的內容也是一樣的。

8、從手機拉取文件

ADB命令:adb pull 手機端的路徑/拉取文件名(全名) \電腦端存儲文件路徑

示例:

將手機/sdcard目錄中的test.txt文件,發送到電腦桌面

C:\Users\L>adb pull /sdcard/test.txt C:\Users\L\Desktop
/sdcard/test.txt: 1 file pulled, 0 skipped. 0.0 MB/s (36 bytes in 0.002s)

C:\Users\L>

桌面上會接收到test.txt文件。

注意:練習的時候,文件名盡量不要使用中文,可能測試效果不好。

參考://github.com/mzlogin/awesome-adb