標籤:令行 服務 使用 序列 version width 基本 移除 rect
概述
Adb作為PC和Android裝置互動與通訊的工具
Android調試橋接,Android DebugBridge,它是一個CS架構的命令列工具,作用就是PC通過adb來操作手機
Adb的組成
用戶端(client):所有命令都是PC發起,可以對Android應用進行安裝,卸載和調試(可以有多個視窗或程式發送命令)
服務端(server):管理用戶端到Android裝置上adb後台進程的串連(不同用戶端發來的命令都由伺服器負責和Android裝置通訊,他們之間的通訊都是通過5037連接埠串連)
守護進程:Android後台啟動並執行進程,負責接收命令(ADB伺服器和守護進程的通訊是通過相鄰的兩個連接埠實現的,偶數連接埠(比如5554)負責處理命令列的通訊,奇數連接埠(比如5555)是用來保持串連的,我們可以看到,adb伺服器可以和多台裝置串連,每串連一個,會分配兩個相鄰的連接埠出來,第一對是5554/5555,第二對就是5556/5557,相對應的,我們adb串連多台裝置的時候,需要指定連接埠號碼或者裝置名稱,伺服器會找到對應的裝置,進行通訊)
Adb環境配置
下載SDK-------將tools和platform-tools兩個目錄配置到系統內容變數PATH中-----這樣就可以直接在命令列中使用adb命令進行驗證了
ADB命令ADB基本命令格式
adb [-e | -d | -s<裝置序號>]<子命令>
參數 |
說明 |
-e |
只運行在模擬器 adb -e shell |
-d |
只運行在真機adb -d shell |
-s |
運行在指定的裝置中,裝置序號通過adb device擷取到 |
help |
列出adb協助檔案 |
version |
列出adb版本 |
Adb基礎命令
檔案傳輸和安裝命令
子命令 |
參數 |
說明 |
devices |
[-l]詳細資料 |
列出所有已經串連的裝置,有三種狀態 device/offline/device not fount 分別對應裝置串連正常,裝置斷線和裝置未找到 |
push |
<local> <remote> |
複製電腦本地檔案到手機裝置 |
pull |
<remote> <local> |
拉取手機裝置檔案到本地 |
install |
[-lrtsd] <file> |
安裝apk -l:標識應用為受限制應用 -r:替換安裝 -t:運行安裝測試包 -s:安裝到SD卡 -d:允許降級安裝 |
install -mutiple |
[-lrtsd] <file ...> |
大量安裝 -p:部分應用程式安裝 |
uninstall |
[-k] <package> 尋找包名可以通過命令(adb shell pm list packages | find “***”) |
卸載 -k:保持data和cache下的檔案 |
擷取資訊命令
子命令 |
參數 |
說明 |
wait-for-device |
無 |
等待裝置串連 |
start-server |
無 |
開啟adb服務 |
kill-server |
無 |
殺掉adb服務(adb連不上的時候可以嘗試) |
get-state |
無 |
擷取adb服務狀態 offline | bootloader | device |
get-serialno |
無 |
擷取SN號 |
get-devpath |
無 |
擷取device-path |
status-window |
無 |
連續列印指定裝置的裝置狀態(監聽狀態)—做開發工具時使用較多 |
Log與重啟相關命令
子命令 |
參數 |
說明 |
bugreport |
無 |
列印當前的dumpsys,sumpstate,logcat的輸出 |
logcat |
參數較多, 需要單獨研究 |
輸出Android系統日誌 |
shell |
參數較多, 需要單獨研究 |
進入遠程shell端 |
remount |
無 |
重新掛載系統磁碟分割,是的系統磁碟分割重新可寫(多用於push到系統目錄之前) |
reboot |
[bootloader | recovery] |
重啟 |
reboot -bootloader |
無 |
重啟到bootloader |
root |
無 |
重新啟動adbd擷取root身份 |
usb |
無 |
重新啟動adbd來監聽USB,相當於重新插拔USB |
tcpip |
<port> |
重新啟動adbd來監聽指定的TCP連接埠 |
Adb備份與恢複命令
子命令 |
參數 |
說明 |
backup (將一頁的資料檔案寫入到指定的檔案,如果沒有指定-f輸出目錄,則儲存在目前的目錄的backup.ab) |
[-f<file>] |
指定備份目錄 |
[-apk | -noapk] |
是否備份apk檔案,預設為否 |
[-obb | -noobb] |
是否備份obb資料包,預設為否 |
[-shared | -noshared] |
是否備份SD卡共用內容,預設為否 |
[-all] |
備份所有已安裝應用 |
[-system | -nosystem] |
是否備份系統應用,-all包括系統應用 |
[<packages...>] |
備份指定的應用列表 |
restore |
無 |
將備份檔案恢複到手機中 |
這兩個命令可以實現資料的備份以及兩台手機間的資料恢複等情境
如的操作步驟可以將手機完全備份,備份的過程中可以進行加密,這樣恢複的時候也要求輸入密碼
Adb重新導向連接埠命令
連接埠映射模型
將開發PC上的連接埠(1314)重新導向到裝置的連接埠(5200)上,這樣所有發往PC連接埠1314的資料都會被轉寄到裝置連接埠5200。
這個機制可以實現遠端控制Android裝置應用。
如
具體命令如下表格,具體應用後續如果使用到再進行補充
子命令 |
參數 |
說明 |
forward --list |
無 |
列出所有通訊端串連列表 |
forward |
<local><remote> |
重新導向連接埠 |
forward --norebind |
<local><remote> |
重新導向連接埠,假如local連接埠已經被佔用則失敗 |
forward --remove |
<remote> |
移除本地已串連的通訊端 |
forward --remove-all |
無 |
移除本地已串連的所有通訊端 |
reverse --list |
無 |
列出所有串連裝置的反向串連通訊端 |
reverse |
<remote><local> |
反向串連通訊端 |
reverse --norebind |
<remote><local> |
反向串連,假如連接埠被佔用則失敗 |
reverse --remove |
<remote> |
刪除一個特定的逆轉通訊端串連 |
reverse --remove-all |
無 |
刪除所有特定的逆轉通訊端串連 |
Adb無線串連與檔案同步
Adb無線串連可以不使用USB來直接調試Android裝置,這樣就是通過TCP/IP串連來操作裝置,其實和操作模擬器的原理是一致的
子命令 |
參數 |
說明 |
connect |
<host>[:<port>] |
通過TCP/IP串連到裝置,如果沒有指定連接埠號碼則使用5555作為預設連接埠 |
disconnect |
<host>[:<port>] |
斷開與TCP/IP裝置的串連,如果沒有指定連接埠號碼則使用5555作為預設連接埠,如果使用這個命令沒有附加參數,將連接埠所有串連的TCP/IP裝置 |
sync |
[<directory>] |
只要檔案發生改變時就會自動從主機拷貝到裝置,需要指定環境變數ANDROID_PRODUCT_OUT為同步目錄 |
同步檔案的使用情境多為有多個so檔案等需要同步,如果一個個刪除再push的話會耗費很大的工作量,這時候使用同步命令
無線串連和同步的具體操作後續完善補充
Adb串連問題Adb list of devices attached
Windows:
首先安裝驅動程式,看裝置管理員驅動是否安裝成功,不能安裝驅動可以藉助隨便一個手機小幫手解決
然後開啟手機開發人員選項中的usb調試,並允許電腦始終對手機usb調試
連不了的時候首先用adb kill-server和adb start-server進行重啟adb,或者用命令查看是哪個進程佔用了5037連接埠,然後進行釋放
參考:http://blog.csdn.net/johnnycode/article/details/7678083
這時候如果這些準備好的話應該是可以正常串連的,我們的手機序號應該已經寫入了Windows下的.android隱藏目錄下的adb_usb.ini檔案,但還是同樣的adb list of devices attached,這時候我們要考慮自動連接寫入的adb裝置號是否和我們終端使用的adb為同一個路徑,在合適的位置寫入正確的裝置號即可,親測有效,記得加0x
參考:http://blog.csdn.net/join_12/article/details/45970717
Ubuntu:和Windows下的基本思路是一致的,具體的操作方法參考如下文章:
http://blog.csdn.net/mr_driver/article/details/8449642
Adb devices offline
連接埠搶佔,可以參考上述方法解決
Appium 自動化測試第一天——基礎知識