1. 程式人生 > >Android開發——常用ADB命令的使用

Android開發——常用ADB命令的使用

ADB全稱Android Debug Bridge, 是android sdk裡的一個工具, 位於 SDK/platform-tools/ 目錄下,其原始碼位於/system/core/adb 目錄下。

ADB採用C/S架構,包括以下三個部分:
(1)客戶端部分:執行在PC端,可以通過在命令列中執行adb命令來呼叫該客戶端。
(2)服務端部分:執行在PC端的後臺程序,用於管理客戶端與執行在模擬器/真機的守護程序通訊。
(3)守護程序部分:運行於模擬器/真機的後臺。需要在手機上開啟選項settings-applications-development-USBdebugging。

ADB的工作原理:
(1)當啟動一個ADB客戶端時,客戶端首先檢查ADB服務端程序是否執行,沒有執行則啟動服務端,否則客戶端使用TCP 5037埠向服務端通傳送ADB命令

(服務端可以管理連線多個客戶端,因此這些客戶端在控制模擬器/真機的角度來看是等價的)。如下圖所示:
這裡寫圖片描述
(2)接下來服務端通過掃描 5555-5585 之間的奇數號埠與所有正在執行的模擬器/真機連線。若沒有發現則報error:no devices found,一旦發現 adb 守護程序,就通過此埠進行連線。當服務端與所有的模擬器建立連線之後,就可以使用 adb 命令來控制或者訪問了。
需要說明的是,每一個模擬器/真機使用一對有序的埠,偶數號埠用於控制檯連線,奇數號埠用於 adb 連線。

ADB的功能如下:

  • 執行裝置的shell(命令列)
  • 管理模擬器或裝置的埠對映
  • 圖片連結和圖片上傳
  • 計算機和裝置之間上傳/下載檔案
  • 將本地apk軟體安裝至模擬器或android裝置

ADB常用的幾個命令:

1.檢視裝置

adb devices

這個命令是檢視當前連線的裝置, 連線到計算機的android裝置或者模擬器將會列出顯示。在模擬器和真機同時線上時,可以通過如下命令進入到指定裝置下的Shell。

adb -s <裝置名稱> shell

在proc目錄下我們可以看到一些比較熟悉的目錄/檔案,比如data,system,cpuinfo(獲取CPU資訊),uid_stat(獲取流量資訊)等。

2.裝置資訊相關

adb reboot

這個命令用於重啟裝置。

adb get-serialno

這個命令用於獲取裝置序列號。

adb shell  cat /sys/class/net/wlan0/address

這個命令用於獲取裝置Mac地址。

adb shell getprop ro.product.model

這個命令用於獲取裝置型號。

adb shell getprop ro.build.version.release

這個命令用於獲取裝置Android版本。

adb shell wm size

這個命令用於獲取裝置螢幕解析度。

adb shell wm density

這個命令用於獲取裝置密度。

3.安裝/解除安裝軟體

adb install <apk檔案路徑>

這個命令將指定的apk檔案安裝到裝置上。
如果加 -r 引數,為保留配置和快取檔案重新安裝APK。
如果加 -s 引數,為安裝APK到SD卡。

adb uninstall <包名>

如果加 -k 引數,為解除安裝軟體但是保留配置和快取檔案。

4.啟動/強制停止應用

adb shell am start -n <packagename>/.ui.SplashActivity
adb shell am force-stop <packagename>

上述兩個命令用於啟動和強制停止應用,程式碼中有一點小區別需要注意。

5.登入裝置shell

adb shell <command命令>

這個命令將登入裝置的shell。
後面加command命令將是直接執行裝置命令,相當於執行遠端命令。

6.包管理

adb shell pm list packages

這個命令列出手機裝的所有app的包名。
在命令最後“-s”表示列出系統應用的包名,加“-3”列出第三方應用的包名。

adb shell pm list packages | grep qq

當然可以使用 grep 命令來過濾結果。

adb shell pm path <packageName>

這個命令用於獲取指定包名的儲存路徑。

7.清除應用資料與快取

adb shell pm clear <packagename>

有些時候我們測試需要清除資料與快取。

8.和PC端互傳檔案

adb push <本地路徑> <遠端路徑>
adb pull <遠端路徑> <本地路徑>

示例程式碼如下(完成sd卡下的20160712目錄拷貝到PC端的e盤根目錄下):

adb pull /storage/sdcard0/20160712 e://

push 完成從PC端到Android端,pull 反之。
這裡要注意,如果在PC端cmd直接adb shell再執行adb pull會發生“device not found”錯誤,必須退出shell命令才可以完成檔案傳輸。因此,在程式碼裡實現檔案通過ADB傳輸到電腦,是不可能的,程式碼裡如果按照如下命令執行adb pull會在返回的錯誤輸出流中讀取到“device not found”錯誤資訊,同時可以看到waitFor()返回值為1,雖然官方表示返回值為1是許可權問題,但在這裡明顯不是許可權問題,希望遇到同樣問題的小夥伴止住繼續探索許可權的步伐。要想在程式碼裡實現檔案傳輸,最好還是使用Socket等技術。

process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.write(command.getBytes());
os.flush();

9.刪除系統自帶軟體(需Root)

adb shell
cd system/app
rm <目標APP>.*

接著重啟手機即可。

10. Wifi除錯真機

adb tcpip 5555
adb connect <192.168.XXX.XXX>

有時候我們需要利用手機的OTG模式,需要手機連線U盤,那麼我們就不能再使用USB線進行除錯了。
用Wifi除錯的過程如下,先連線USB線,輸入adb tcpip命令,拔出USB線,再電腦端繼續輸入adb connect命令,後面的IP寫區域網分配給真機的地址。顯示成功後,就可以使用手機連線U盤,並且和連線USB線的除錯有一樣的效果啦。

11. ADB Forward

adb forward tcp:6100 tcp:7100 
// PC上所有6100埠通訊資料將被重定向到手機端7100埠server上

很實用的功能,可以在手機和PC端之間直接使用Socket進行通訊。

12. ADB IDEA
這裡推薦一個 AS 外掛 ADB IDEA ,裝了這款外掛可以直接在 AS 中快速操作一些 ADB 命令,非常方便。快捷鍵直接喚起:

//Mac OSX: Ctrl+Shift+A
//Windows/Linux: Ctrl+Alt+Shift+A

這裡寫圖片描述