ADB全稱Android Debug Bridge,Android 開發中, 我們在開發過程中經常使用這個工具來操作Android系統,是 Android 開發者必須掌握的。
功能介紹
ADB主要功能有:
在Android設備上運行Shell(命令行)
管理模擬器或設備的端口映射
在計算機和設備之間上傳/下載文件
將電腦上的本地APK軟件安裝至Android模擬器或設備上
使用配置
一個這么常用工具, Google 早就在 Android SDK 中幫我們集成了,就放在\android-sdk-windows\platform-tools這個目錄下面,我們只需要配置一下環境變量就可以使用了。作為開發者,配置環境變量這種小兒科我就不贅述了......
ADB 用法
查詢模擬器或手機狀態
查看 adb 服務端連接的模擬器或手機可以幫助更好的使用 adb 命令,這可以通過 devices 命令來列舉當前連接的設備:
adb devices
執行結果是 adb 為每一個設備輸出以下狀態信息:
序列號(serialNumber):由 adb 創建用于唯一標識設備的字符串,格式是 <設備類型>-<端口號>,例如: emulator-5554
連接狀態(state),其值是可能是下面的任意一種:
offline — 未連接或未響應
device — 表示設備已經連接到服務端。但需要注意的是,這個狀態并不表示 Android 系統已經完全啟動起來并且可操作,因為系統在啟動的過程中就已經連接 adb ,但這個狀態是正常的可操作狀態。
no device – 表示沒有任何設備連接(樓主測試過程中沒有碰到過 no device 的情況,沒連接設備就沒任何輸出)
操作指定模擬器或手機
如果有多個模擬器或手機正在運行,當使用 adb 命令的時候就需要指定目標設備,這可以通過使用 -s 選項參數實現,用法如下:
adb -s < serialNumber > < command >
// 例如在 emulator-5556 設備上安裝應用:
adb -s emulator-5556 install xxxx.apk
這里補充一點, Google 官方給出在多設備的情況下,不用 -s 參數指定目標設備的快捷方式。
adb -e install xxxx.apk
//同理,如果有多個設備,但只有一個真機,可以使用如下命令快速發送命令
adb -d install xxxx.apk
安裝應用
使用 adb install 命令可以從開發用電腦中復制應用程序并且安裝到模擬器或手機上, adb install 命令必須指定待安裝的.apk文件的路徑。
adb install [-lrtsdg] < path_to_apk >
(-l : 鎖定該程序)
(-r : 重新安裝該程序,保留應用數據)
(-t : allow test packages)
(-s : 將應用安裝到 SD卡,不過現在手機好像都沒有 SD卡 了吧)
(-d : 允許降版本號安裝,當然只有 debug 包才能使用)
(-g : 安裝完默認授予所有運行時權限)
卸載應用
上面介紹了安裝應用命令,既然有安裝應用的命令,那當然有卸載應用的命令。卸載應用命令的格式如下:
// < package > 表示要卸載應用的包名
adb uninstall [-k] < package > (-k:不刪除程序運行所產生的數據和緩存目錄)
與模擬器或手機傳輸文件
使用 adb 命令 pull 和 push 能從 Android 設備拷貝或復制文件到 Android 設備。跟 install 命令不同,pull 和 push 命令允許拷貝和復制文件到任何位置。
- pull
adb pull [-a] < remote_path > < local_path > (-a:保留文件時間戳及屬性)
舉個栗子,我想把應用中的數據庫文件復制到本地目錄下:
adb pull sdcard/contacts_app.db
- push
adb push < local_path > < remote_path >
舉個栗子,我想把桌面的 log.txt 復制到手機的 dev 目錄下:
adb push .../log.txt /dev
無線調試
平時我們都是使用 USB調試,但是有時候設備老化或者數據線連接不穩定, USB 調試就不好使了。這時我們就想能不能拋開這根數據線呢?當然可以,adb 也是支持通過 WIFI 進行調試了,使用方式如下:
首先,你要將 Android 設備和 裝有 adb 的電腦連接到同一 Wi-Fi 網絡。其次,你需要配置好防火墻,否則很有可能導致 Wi-Fi 調試不能使用。
使用 USB數據線 將手機連接到電腦。
-
設置目標設備監聽 5555端口 的 TCP/IP 連接。
adb tcpip 5555
斷開手機與電腦的 USB 連接。
查看手機的 IP地址 。
-
通過 IP 連接手機
adb connect < device_ip_address >
這時就可以使用 adb devices 確認手機是否連接到電腦上了。
通過以上步驟,就可以開心的享用 WiFi 調試了。如果沒有正常連接,可以按照下面的步驟檢查:
- 檢查電腦和手機是否還在同一個 WiFi 網絡下
- 重新執行一次 adb connect <device_ip_address> 命令
- 重啟 adb 服務,然后重頭再來
- 檢查是否是防火墻的設置問題
查看設備的 log
在日常開發中,我們經常要查看日志進行調試我們的app,adb 提供了強大的日志查看命令。 adb logcat 命令格式是這樣的:
adb logcat [選項] [過濾項]
(-s : 設置輸出日志的標簽, 只顯示該標簽的日志)
(-f : 將日志輸出到文件, 默認輸出到標準輸出流中, -f 參數執行不成功)
(-r : 按照每千字節輸出日志, 需要 -f 參數, 不過這個命令沒有執行成功)
(-n : 設置日志輸出的最大數目, 需要 -r 參數, 這個執行 感覺 跟 adb logcat 效果一樣)
(-v : 設置日志的輸出格式, 注意只能設置一項)
(-c : 清空所有的日志緩存信息)
(-d : 將緩存的日志輸出到屏幕上, 并且不會阻塞)
(-t : 輸出最近的幾行日志, 輸出完退出, 不阻塞)
(-g : 查看日志緩沖區信息)
(-b : 加載一個日志緩沖區, 默認是 main, 下面詳解)
(-B : 以二進制形式輸出日志)
舉幾個常用的栗子,場景如下:
- 應用調試過程中,我想看全部日志,并想看日志輸出時間。
adb logcat -v time
- 日志輸出后發現在終端控制臺里查看不太方面,想輸出到文件中查看。
adb logcat -v time >xxx.txt
- 應用崩潰了,我現在只關心崩潰日志。
adb logcat -v time *:e
- 崩潰解決了,心安了,現在想看某一個邏輯完整的執行過程(日志TAG:######)。
adb logcat -s ######
- 前面打了很多日志了,這時我想清空一下緩存區的日志,開始打新的日志。
adb logcat -c
這里就介紹這些基本且常用的命令的使用,如果你想深入了解一下,可以到 Android調試橋 具體學習。
重啟手機
有時候,手動關機太麻煩,那就來個命令行吧~
adb reboot
以 root 權限開啟 adb 守護進程
很多時候我們需要 root 手機以獲得高權限操作手機,此時就需要下面的命令了:
// 此命令會重啟守護進程
adb root
// root 成功后需要重新掛在磁盤
adb remount
開啟或關閉 adb 服務
在某些情況下需要重啟 adb 服務來解決問題,比如 adb 無響應。這時你可以通過 adb kill-server 來實現這一操作。
adb kill-server
kill 之后,通過 adb start-server 或者任意 adb 命令來重啟 adb 服務。
adb start-server
總結
以上就是 adb 命令的常見用法,都是本人日常開發中使用頻率高的。有些不常用的 adb 命令沒有介紹,更多 adb 用法請見:Android調試橋。文中如有紕漏,歡迎大家留言指出。