一、adb介紹與環境配置
adb:Android調試橋接Android Debug Bridge,是一個C/S架構的命令行工具
1.adb組成:
- 客戶端(Client):可以通過它對android應用進行安裝、卸載及調試
- 服務(Server):管理客戶端到android設備上adb後臺進程的連接
- 守護進程(adb daemon):運行在android設備上的adb後臺進程
2.下載安裝:
- 下載Android SDK,點擊Android官網 下載
- 環境配置:將tools和platform-tools目錄配置到系統變量PATH(如何配置詳情請參考http://blog.csdn.net/qq_26967883/article/details/49337043的android配置環境)
- 驗證是否配置成功:在cmd窗口輸入adb
3.adb命令格式
adb[-e|-d|-s<設備序列號>]<子命令>
參數 | 說明 | ||
---|---|---|---|
-e | 只運行在模擬器 | ||
-s | 運行指定的設備 | ||
-help | 列出adb幫助文件 | ||
-version | 列出adb版本 |
- 例如:
使用adb devices
命令後發現有兩個設備一個模擬器,一個真機
- 使用
adb -e shell
命令進入到模擬器中 - 使用
adb -d shell
命令進入到真機中 - 使用
adb -s <設備ID> shell
命令進入到指定設備中
List of devices attached
192.168.213.101:5555device
//上面那串數字就是設備ID
二、adb基本命令
1.文件傳輸與安裝命令
子命令 | 參數 | 說明 |
---|---|---|
devices | [-l] | 列出所有已經連接的設備,有三種狀態: device/offline/device not found |
push | < local > < remote > | 複製一個文件或者目錄到設備中 |
pull | < remote > < local > | 從手機複製文件到本地 |
install | [-l -r -t -s -d]< file > | 安裝apk -l:表示應用爲受限應用 -r:替換已經存在的應用 -t:運行安裝測試包 -s:安裝到SD卡中 -d:允許安裝到sd卡中 |
install-multiple | [-l -r -t -s -d -p]< file... > | 批量安裝 -p:部分應用程序安裝 |
uninstall | [-k]< package > | -k:保持data和cache下的文件 |
2.獲取信息命令
子命令 | 參數 | 說明 |
---|---|---|
wait-for-device | 無 | 等待設備連接(設備未連接之前使用) |
start-server | 無 | 開啓adb服務 |
kill-server | 無 | 殺掉adb服務 |
get-state | 無 | 獲取adb服務狀態 offline/bootloader/device |
get-serialno | 無 | 獲取SN號 |
get-devpath | 無 | 獲取device-path |
status-window | 無 | 連續打印指定設備的設備狀態 |
3.Log與重啓相關命令
子命令 | 參數 | 說明 |
---|---|---|
bugreport | 無 | 打印當前的dumpsys、sumpstate、locat的輸出 |
logcat | 命令較多 | 輸出android系統日誌 |
shell | 命令較多 | 進入遠程shell端 |
remount | 無 | 重新掛載系統分區,使系統分區重新可寫(需要root權限) |
reboot | [bootloader | recovery] | 重啓 Bootloader:重啓設備到bootloader狀態 recovery:重啓設備到recovery狀態 |
reboot-bootloader | 無 | 重啓到bootloader |
root | 無 | 重新啓動adbd獲取root身份 |
usb | 無 | 重新啓動adbd來監聽USB |
tcpip | < port > | 重新啓動adbd來監聽指定TCP端口 |
- 針對Logcat相關命令補充
我本人是做測試的,所以對於應用的log這塊比較看重,因此總結了一些指向性的實例:
//使用該命令可以查看指定應用的實時日誌
adb logcat | find "packageName"
//使用該命令後指定的應用的相關日誌會導出到相應位置
adb logcat | find "packageName" >F:\test\test.txt
4.實例演示
1)devices
//列出已連接的設備
adb devices
//列出已連接的設備,並顯示狀態
adb devices -l
2)push
//將C盤目錄下的apktool.log複製到設備的/mnt/sdcard/目錄中
adb push C:\apktool.log /mnt/sdcard/
//將C盤目錄下的apktool.log複製到虛擬設備的/mnt/sdcard/目錄中
adb -e push C:\apktool.log /mnt/sdcard/
3)pull
//查看模擬器設備/data/app目錄下的所有文件
adb -e shell ls /data/app
//將模擬器設備/data/app目錄下的test.txt文件複製到本地c盤根目錄
adb -e pull /data/app/test.txt c:\
4)remount、pull、root
//在模擬器設備中重新掛載系統分區,使系統分區重新可寫(需要root權限)
adb -e remount
//重新獲取一下模擬器設備的root身份
adb -e root
//複製I:\com.android.cts.uiautomator.apk到/system/app中
adb push I:\com.android.cts.uiautomator.apk /system/app
5)install、uninstall
//將本地.apk文件安裝到模擬器設備中
adb -e install I:\com.android.cts.uiautomator.apk
//替換掉模擬器設備中的.apk文件然後重新安裝一次
adb -e install -r I:\com.android.cts.uiautomator.apk
//卸載包名爲com.android.cts.uiautomator的應用,但是保留保持data和cache下的文件(可以使用"adb -e shell pm list packages "命令查看包名)
adb -e uninstall -k com.android.cts.uiautomator
//完全卸載包名爲com.android.cts.uiautomator的應用。用到這個位置的話是刪除data和cache下的文件的用意
adb -e uninstall com.android.cts.uiautomator
6)servers
//殺掉adb服務
adb kill-server
//啓動adb服務
adb start-server
//獲取真機的連接狀態
adb -d get-state
//獲取真機SN號
adb -d get-serialno
//獲取真機的path
adb -d get-devpath
//不斷獲取真機的連接狀態
adb -d status-window
//會列出許多真機的當前信息
adb -d bugreport
//重啓真機
adb -d reboot
//重啓USB,相當於重新插了一下USB設備的效果
adb -d usb
//在不插入設備的情況下輸入該命令剛開始會提示找不到設備,但那是等插入設備後就可以正常安裝了
adb -d install -r I:\com.android.cts.uiautomator.apk
//他會先等待你連接上設備後再進行替換安裝
adb -d wait-for-device install -r I:\com.android.cts.uiautomator.apk
//等待設備連接後輸出日誌
adb logcat wait-for-device
三、adb備份與恢復命令
子命令 | 參數 | 說明 |
---|---|---|
backup | 無 | 將應用的數據文件寫入到指定的文件,在不指定-f輸出目錄的情況下,保持在當前目錄的"backup.ab" |
[-f < file >] | 指定備份目錄 | |
[-apk | -noapk] | 是否備份apk文件,默認是noapk | |
[-obb | -noobb] | 是否備份obb數據包,默認是noobb | |
[-shared | -noshared] | 是否備份SD卡共享內容,默認是noshared | |
[-all] | 備份所有已安裝的應用 | |
[-system | -nosystem] | 是否備份系統應用,-all默認是包括系統應用 | |
< packages... > | 備份指定的應用列表 | |
restore | < file > | 將備份文件恢復到手機中 |
- 例如:
//數據備份在你本地的當前目錄,比如:"C:\Users\test>adb -apk -all"裏的C:\Users\test路徑就是當前目錄
adb -apk -all
//將當前目錄的備份文件恢復到設備
adb shell -restore back.ab
四、adb重定向端口命令
1.端口映射概念
比如將PC上的端口(1314)重定向到設備的端口(5200)上,這樣所有發往PC端口(1314)的數據都會被轉發到設備的端口(5200)上。這個機制可以實現遠程控制Android設備應用。
2.端口映射命令
子命令 | 參數 | 說明 |
---|---|---|
forward --list | 無 | 列出所有套接字連接列表 |
forward | < local > < remote > | 重定向端口 |
forward --no-rebind | < local > < remote > | 重定向端口,例如local端口已經被佔用則失敗 |
forward --remove | < local > | 移除本地已經連接的套接字 |
forward --remove-all | 無 | 移除本地已經連接的所有套接字 |
reverse --list | 無 | 列出所有連接設備反向的套接字 |
reverse | < remove > < local > | 反向連接套接字 |
reverse --norebind | < remove > < local > | 反向連接,加入端口已經被佔用則連接失敗 |
reverse --remove | < remove > | 刪除一個特定的逆轉套接字連接 |
reverse --remove-all | 無 | 刪除所有逆轉的套接字連接設備 |
- 注:
a. foward系列的命令是PC端發出的
b. reverse系列的命令是設備發出的
3.實例:
- 正向連接的例子:
//給設備上的monkey開闢端口1080
adb shell monkey --port 1080
//PC上的1080端口映射到設備上的1080端口(需要再打開一個新的cmd窗口
adb forward tcp:1080 tcp1080
//連接1080端口,連接好後會彈出一個新的窗口,此時可以發送一些按鍵消息比如"press 3"使用完畢關掉該窗口
telent localgost 1080
//查看剛剛映射的端口是否還在
adb forward --list
//移除所有映射的端口
adb forward --remove-all
- 說明:由於反向連接貌似比較複雜,並且我個人在工作中暫時沒有需求,就沒有進行深入研究,有興趣的朋友可以自己去看看
五、adb無線連接與文件同步
無線連接可以實現不用USB進行調試應用,文件同步可將修改的文件自動快速的push到手機對應的目錄中
1.相關命令
子命令 | 參數 | 說明 |
---|---|---|
connect | < host >[:< port >] | 通過TCP/IP連接到設備 如果沒有指定端口號則使用5555作爲默認端口 |
disconnect | < host >[:< port >] | 斷開TCP/IP設備 如果沒有指定端口號則使用5555作爲默認端口 使用這個命令沒有附加參數,將斷開所有連接的TCP/IP設備 |
sync | [< directory >] | 只要文件發生改變時就會自動從主機拷貝到設備需要指定環境變量ANDROID_PRODUCT_OUT爲同步目錄 |
2.無線連接步驟
- 將安卓設備root掉
- 手機端安裝wireless adb工具(一個命令行工具可以在手中使用命令)
- PC和Android設備連接到同一網絡,手機上查看android設備IP可以使用命令"netcfg"
- PC端輸入命令`adb connect IP地址:端口`(默認端口爲5555)來通過TCP/IP連接到設備
adb connect 192.168.1.104:5555
//這裏的地址就是在手機端使用"netcfg"命令後顯示出來的IP,5555爲默認端口
//然後就可以使用adb的其他命令對手機進行操作了
3.文件同步步驟
- sync如果沒有指定更新目錄,則會自動更新這些目錄"system"、"vendor"、"data"
- 在PC上新建一個目錄,目錄中新建三個文件夾分別命名爲"system"、"vendor"、"data"
- 爲新建目錄(就是三個新建文件夾的父文件夾所在的位置)設置系統環境變量ANDROID_PRODUCT_OUT
- 使用命令 `adb sync` 進行同步
- 注意
- 如果不是特別常用文件同步功能的話可以設置臨時環境變量,就是在cmd窗口設置臨時環境變量,只能在當前窗口可用,窗口關閉則變量失效
- 臨時環境變量設置方式,打開一個cmd窗口然後在命令行輸入`set ANDROID_PRODUCT_OUT=I:\sync`其實sync爲父文件夾的名子,這樣在本cmd窗口內就可以使用該變量了,關閉本cmd窗口則臨時變量消失
- 如果要在設備的目錄的子目錄下同步文件需要在PC端創建與手機端同名的文件夾,比如說要在手機的/data/data目錄中同步PC端的文件,那麼只需在PC端的data目錄中再創建一個data文件夾即可。