????對(duì)于Android開發(fā)來說 秋泄,我感覺ADB即熟悉又陌生。熟悉是因?yàn)榻?jīng)常聽說過规阀,并且時(shí)不時(shí)會(huì)用到一兩條簡(jiǎn)單的命令恒序;陌生是大部分情況下很少使用,因?yàn)橐恍㊣DE工具已經(jīng)幫我們集成了一些常用的命令谁撼,Android studio 中的 ADT歧胁、SDK Tools 目錄下的 DDMS、Monitor 等工具厉碟,都是同樣地用到了 adb 的功能來與 Android 設(shè)備進(jìn)行交互喊巍。下面的總結(jié)部分內(nèi)容來自Github 上一位開發(fā)者的博客ADB 用法大全
????另外說明下:PC 端的一些手機(jī)助手,如應(yīng)用寶? 360 手機(jī)助手等墨榄,就是集成了adb命令方便我們操作玄糟,基本上這類助手上的操作都可以通過 adb 命令去完成,這里建議開發(fā)或者測(cè)試人員盡量不要在電腦上安裝這類手機(jī)助手袄秩,因?yàn)槠渥詭У?adb 程序可能會(huì)與 Android SDK 下的 adb 程序產(chǎn)生沖突阵翎,5037?端口被占用逢并,導(dǎo)致使用 adb 命令時(shí)無法連接到設(shè)備。
? ? 首先看下ADB的概念郭卫。ADB 全稱?Android Debug Bridge 砍聊,即Android調(diào)試橋梁,下面為官方對(duì)ADB的介紹贰军。
????Android的初衷是用ADB來協(xié)助開發(fā)人員在開發(fā)android應(yīng)用的過程中更快更好的調(diào)試apk玻蝌,因此adb具有安裝卸載apk、拷貝推送文件词疼、查看設(shè)備硬件信息俯树、查看應(yīng)用程序占用資源、在設(shè)備執(zhí)行shell命令等功能贰盗。
基本的語法
adb [-d|-e|-s <serialNumber>] ?<command>
? ? 如果Server端只連接了一臺(tái)設(shè)備许饿,就可以省略[-d|-e|-s <serialNumber> ] 中的內(nèi)容。直接使用adb?<command>舵盈。比如adb install ***.apk?
? ? 如果有多臺(tái)設(shè)備或者模擬器陋率,則需要指定目標(biāo)設(shè)備
ADB根據(jù)設(shè)備類型分為模擬器和設(shè)備,而設(shè)備的連接方式有兩種 usb連接或者無線連接
USB 連接
通過 USB 連接來正常使用 adb 需要保證幾點(diǎn):
????1.設(shè)備(手機(jī)/Android設(shè)備)的狀態(tài)是正常的
????2.打開開發(fā)者模式和?USB 調(diào)試模式秽晚。一般在手機(jī)-[設(shè)置]-[開發(fā)者模式]-[Android調(diào)試] 中打開
????3.Server端的驅(qū)動(dòng)是正常的瓦糟。在 Windows 下有可能遇到需要安裝驅(qū)動(dòng)的情況,確認(rèn)這一點(diǎn)可以右鍵「計(jì)算機(jī)」-「屬性」赴蝇,到「設(shè)備管理器」里查看相關(guān)設(shè)備上是否有黃色感嘆號(hào)或問號(hào)菩浙,如果沒有就說明驅(qū)動(dòng)狀態(tài)已經(jīng)好了。否則可以下載一個(gè)手機(jī)助手類程序來安裝驅(qū)動(dòng)
????通過USB連接后可以用1.獲取設(shè)備 命令來查看是否連接成功扯再。
無線連接
? ??除了可以通過 USB 連接設(shè)備與電腦來使用 adb芍耘,也可以通過無線連接——雖然連接過程中也有需要使用 USB 的步驟,但是連接成功之后你的設(shè)備就可以在一定范圍內(nèi)擺脫 USB 連接線的限制
操作步驟:
????1.將 Android 設(shè)備與要運(yùn)行 adb 的電腦連接到同一個(gè)局域網(wǎng)熄阻,一般連到同一個(gè) WiFi斋竞。一些Android設(shè)備是有網(wǎng)口的,也可以通過網(wǎng)線連接
????2.將設(shè)備與電腦通過 USB 線連接秃殉,并確保USB連接成功
? ? 3.使用ADB命令讓該設(shè)備在 5555 端口監(jiān)聽TCP/IP 連接
adb tcpip 5555
? ? 4.斷開 USB 連接坝初。
? ? 5.查看設(shè)備的?IP 地址 。一般能在「設(shè)置」-「關(guān)于手機(jī)」-「狀態(tài)信息」-「IP地址」找到钾军,也可以使用后面講到的ADB命令查看IP地址
? ? 6.通過IP連接設(shè)備
adb connect <device-ip-address>
比如?adb connect 192.168.1.102
? ? 如果提示“connected to 192.168.1.102:5555” ?說明無線連接成功
? ??如果連接不了鳄袍,請(qǐng)確認(rèn) Android 設(shè)備與電腦是連接到了同一個(gè) WiFi,然后再次執(zhí)行?adb connect <device-ip-address>?那一步吏恭;如果還是不行的話拗小,通過?adb kill-server?重新啟動(dòng) adb 然后從頭再來一次試試
另外,能否不通過USB就能實(shí)現(xiàn)無線連接呢樱哼,是可以的哀九,首先Android設(shè)備還是和電腦保證在同一局域網(wǎng)段下剿配,而且手機(jī)需要 root 權(quán)限便监。接著步驟如下:
????1.在 Android 設(shè)備上安裝一個(gè)終端模擬器单芜,就是可以在Android上輸入一些命令的APP。已經(jīng)安裝過的設(shè)備可以跳過此步张惹。我使用的終端模擬器下載地址是:Terminal Emulator for Android Downloads
? ? 2.打開 Android 設(shè)備上的終端模擬器息裸,在里面依次運(yùn)行命令
su
setprop service.adb.tcp.port 5555
? ? 3.在電腦上通過 adb 和 IP 地址連接 Android 設(shè)備
adb connect <device-ip-address>
1.獲取設(shè)備
adb devices
List of devices attached
b9746827 device
emulator-5554 device
如果List of devices attached 下面有多個(gè)device,有你需要的設(shè)備說明連接成功了
2.啟動(dòng)/停止 ADB?
adb start-server
adb kill-server
一般情況下是不需要啟動(dòng)adb 的因?yàn)閍db自動(dòng)啟動(dòng)蝇更,如果沒有啟動(dòng)就輸入如上的命令。一般在連接出現(xiàn)異常呼盆,使用 adb devices 未正常列出設(shè)備年扩, 設(shè)備狀態(tài)異常時(shí)使用 kill-server,然后運(yùn)行 start-server 進(jìn)行重啟服務(wù).
3.指定 adb server 的網(wǎng)絡(luò)端口
adb server的默認(rèn)端口是5037访圃,如果想更改可以輸入
adb -P <part> start-server
比如adb -P 8888 start-server
4.安裝應(yīng)用
adb install [-lrtsdg] <path_to_apk>
adb install?后面可以跟一些可選參數(shù)來控制安裝 APK 的行為常遂,可用參數(shù)及含義如下:
運(yùn)行命令后如果見到類似如下輸出(狀態(tài)為?Success)代表安裝成功:
[100%] /data/local/tmp/1.apk
? ??????????pkg: /data/local/tmp/1.apk
Success
如果狀態(tài)為?Failure?則表示安裝失敗,比如:
[100%] /data/local/tmp/map-20160831.apk
????????????pkg: /data/local/tmp/map-20160831.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]
常見安裝失敗輸出代碼挽荠、含義及可能的解決辦法如下:
adb install?實(shí)際是分三步完成:
? ? 1.push apk 文件到 /data/local/tmp
? ? 2.調(diào)用 pm install 安裝
? ? 3.刪除 /data/local/tmp 下的對(duì)應(yīng) apk 文件
5.卸載應(yīng)用
adb uninstall [-k] <packagename>
<packagename>?表示應(yīng)用的包名,-k?參數(shù)可選平绩,表示卸載應(yīng)用但保留數(shù)據(jù)和緩存目錄圈匆。比如
adb uninstall com.qihoo360.mobilesafe
6.復(fù)制設(shè)備里的文件到電腦
adb pull <設(shè)備里的文件路徑> [電腦上的目錄]
[電腦上的目錄] 可以省略,即復(fù)制到當(dāng)前目錄
比如 adb pull /sdcard/123.txt ~/tmp/? ?復(fù)制123.txt文件到tmp目錄下
7.復(fù)制電腦里的文件到設(shè)備
adb push <電腦上的文件路徑> <設(shè)備里的目錄>
比如:adb push~/text.mp4 ?/sdcard/
8.查看正在運(yùn)行的 Services
adb shell dumpsys activity services [<packagename>]
<packagename>?參數(shù)不是必須的捏雌,指定?<packagename>?表示查看與某個(gè)包名相關(guān)的 Services跃赚,不指定表示查看所有 Services。<packagename>?不一定要給出完整的包名
9.查看前臺(tái) Activity
adb shell dumpsys activity activities
這里面包含了很多信息性湿,可以單獨(dú)寫一篇博客總結(jié)
10.查看應(yīng)用詳細(xì)信息
adb shell dumpsys package <packagename>
比如 adb shell dumpsys package cn.com.quickpark.mep
Activity Resolver Table:
? ??Schemes:
????????wx4d9259f3fed5cb07:
? ??????7112336 cn.com.quickpark.mep/.activities.youjia.qppay.ActivityQppayRecharge filter bcfd6ac
? ? ? ? .....
Receiver Resolver Table:
? ?? Non-Data Actions:
? ??????android.intent.action.SCREEN_OFF:
? ?????? d5bb50d cn.com.quickpark.mep/com.igexin.sdk.PushReceiver filter e7710b9
? ? ? ? ......
????輸出中包含很多信息纬傲,包括 Activity Resolver Table、Registered ContentProviders肤频、包名叹括、userId、安裝后的文件資源代碼等路徑宵荒、版本信息汁雷、權(quán)限信息和授予狀態(tài)、簽名版本信息等报咳。