ADB(Android Debug Bridge)是 Android 開發和測試不可或缺的調試工具,它建立了電腦與 Android 設備之間的通信橋梁,通過命令行指令可實現對設備的全方位控制。掌握 ADB 指令能大幅提升開發效率,解決各類調試難題。本文系統整理了 ADB 的常用指令,按功能分類詳解,包含使用場景與實戰示例,助你快速成為 ADB 高手。
一、ADB 基礎與環境配置
什么是 ADB?
ADB 是 Android SDK 中的一個命令行工具,全稱為 Android Debug Bridge,本質是一個客戶端 - 服務器程序,包含三個核心組件:
- 客戶端:運行在開發機上,負責接收用戶輸入的指令(如命令行輸入adb命令)
- 守護進程(daemon):以adbd進程形式運行在 Android 設備后臺,負責執行客戶端發送的指令
- 服務器:運行在開發機后臺的adb進程,負責管理客戶端與設備守護進程的通信,協調多個客戶端與設備的連接
ADB 最初由 Google 在 Android 1.0 時代推出,設計初衷是解決開發過程中 "設備 - 開發機" 交互的痛點。它基于 TCP/IP 協議實現通信,默認通過 USB 接口傳輸數據,也支持無線連接模式。經過十余年演進,ADB 已從簡單的調試工具發展為集設備管理、應用調試、系統控制于一體的全能工具,成為 Android 開發生態中不可或缺的基礎設施。
其核心價值體現在:
- 打破應用沙箱限制,允許開發機直接操作設備底層資源
- 提供統一的命令接口,兼容從手機到智能手表的全系列 Android 設備
- 支持跨平臺操作(Windows/macOS/Linux),保障開發環境一致性
ADB 的工作原理
ADB 的通信流程遵循典型的 C/S 架構:
1.當用戶在終端輸入adb命令時,客戶端會向本地 ADB 服務器發送請求(默認端口 5037)
2.服務器檢查是否已與目標設備建立連接,若未連接則嘗試通過 USB 或網絡發現設備
3.服務器將指令轉發至設備上的adbd守護進程
4.守護進程執行指令并將結果通過服務器返回給客戶端
5.客戶端將結果顯示在終端界面
這種分層架構的優勢在于:
- 支持多客戶端同時連接(如同時打開多個命令行窗口操作設備)
- 服務器自動管理設備連接狀態,無需用戶手動維護通信鏈路
- 指令執行與結果返回的異步處理,提升復雜操作的效率
環境配置步驟
1.安裝 Android SDK Platform Tools:
- 官網下載對應系統的 Platform Tools(包含 ADB 工具)
- 解壓后將路徑添加到系統環境變量(Windows 的 PATH 或 macOS/Linux 的.bashrc/.zshrc)
- 驗證安裝:打開終端輸入adb version,顯示版本信息即表示安裝成功
2.設備調試模式配置:
- 開啟設備 "開發者選項":連續點擊系統版本號 7 次(不同品牌路徑可能不同)
- 啟用 "USB 調試" 選項(Android 11 + 需額外開啟 "無線調試" 權限)
- 首次連接時,設備會彈出 "USB 調試授權" 窗口,勾選 "始終允許此計算機" 以避免重復授權
3.連接設備:
- 有線連接:用 USB 線連接設備與電腦,通過adb devices確認連接狀態
- 無線連接:需先通過 USB 配置(見后文詳解),適合需要擺脫線纜束縛的場景
4.確認連接狀態:
adb devices
正常情況下會顯示設備序列號及狀態:
- device:連接正常,可執行指令
- offline:設備已連接但未響應(通常需重啟 ADB 或設備)
- unauthorized:未授權調試權限(需在設備上確認授權)
ADB 的安全機制
為保護用戶隱私與設備安全,ADB 采用多層次安全措施:
1.調試授權機制:首次連接新設備時必須通過設備端確認,防止未授權計算機訪問設備
2.權限分級:普通 ADB 指令受限于設備用戶權限,敏感操作(如修改系統文件)需 root 權限
3.無線調試加密:Android 11 + 的無線調試采用配對碼驗證,避免局域網內的惡意連接
4.沙箱隔離:非 root 狀態下,ADB 無法直接訪問其他應用的私有目錄,保障數據隔離
這些機制平衡了開發便利性與設備安全性,尤其在 Android 6.0 引入運行時權限后,ADB 的權限管控更加嚴格,部分系統級操作需通過pm grant顯式授權。
二、設備管理指令
查看設備信息
指令 | 功能 | 示例 |
adb devices | 列出所有連接的設備 | adb devices -l(顯示詳細信息) |
adb get-serialno | 獲取設備序列號 | adb -s 設備號 get-serialno(指定設備) |
adb shell getprop ro.product.model | 查看設備型號 | - |
adb shell getprop ro.build.version.release | 查看 Android 系統版本 | - |
adb shell wm size | 查看屏幕分辨率 | - |
adb shell wm density | 查看屏幕密度 | - |
實戰示例:
# 查看所有設備詳細信息
adb devices -l# 查看設備型號和Android版本
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release
設備連接控制
指令 | 功能 | 示例 |
adb kill-server | 停止 ADB 服務器 | - |
adb start-server | 啟動 ADB 服務器 | - |
adb reboot | 重啟設備 | adb reboot recovery(重啟到恢復模式) |
adb connect <IP:端口> | 無線連接設備 | adb connect 192.168.1.100:5555 |
adb disconnect <IP:端口> | 斷開無線連接 | adb disconnect 192.168.1.100:5555 |
adb usb | 切換到 USB 連接模式 | - |
adb tcpip <端口> | 切換到無線調試模式 | adb tcpip 5555 |
無線連接步驟:
1.先用 USB 連接設備,設置端口:adb tcpip 5555
2.斷開 USB,通過 IP 連接:adb connect 設備IP:5555(設備 IP 在 WLAN 設置中查看)
3.驗證連接:adb devices
注意:設備與電腦需在同一局域網,部分設備需開啟 "無線調試" 選項(Android 11+)
三、應用操作指令
應用安裝與卸載
指令 | 功能 | 示例 |
adb install <APK路徑> | 安裝應用 | adb install app-debug.apk |
adb install -r <APK路徑> | 覆蓋安裝(保留數據) | adb install -r update.apk |
adb install -s <APK路徑> | 安裝到 SD 卡 | adb install -s large_app.apk |
adb uninstall <包名> | 卸載應用 | adb uninstall com.example.myapp |
adb uninstall -k <包名> | 卸載但保留數據 | adb uninstall -k com.example.myapp |
常用參數:
- -r:保留數據和緩存文件,用于應用更新
- -t:允許安裝測試包
- -d:允許降級安裝(低版本覆蓋高版本)
實戰示例:
# 覆蓋安裝并保留數據
adb install -r app-release.apk# 卸載應用但保留用戶數據
adb uninstall -k com.example.myapp
應用運行控制
指令 | 功能 | 示例 |
adb shell am start -n <包名/Activity名> | 啟動應用組件 | adb shell am start -n com.example.myapp/.MainActivity |
adb shell am force-stop <包名> | 強制停止應用 | adb shell am force-stop com.example.myapp |
adb shell am kill <包名> | 殺死應用進程(系統可能重啟) | adb shell am kill com.example.myapp |
adb shell pm clear <包名> | 清除應用數據和緩存 | adb shell pm clear com.example.myapp |
adb shell dumpsys package <包名> | 查看應用詳細信息 | adb shell dumpsys package com.example.myapp |
啟動指定 Activity 示例:
# 啟動應用主Activity
adb shell am start -n com.example.myapp/.MainActivity# 啟動帶參數的Activity
adb shell am start -n com.example.myapp/.DetailActivity -e "id" "123" -e "name" "test"
查看應用安裝路徑:
adb shell pm path com.example.myapp
四、文件傳輸指令
電腦與設備間傳輸文件
指令 | 功能 | 示例 |
adb push <本地路徑> <設備路徑> | 從電腦發送文件到設備 | adb push ./test.txt /sdcard/ |
adb pull <設備路徑> <本地路徑> | 從設備拉取文件到電腦 | adb pull /sdcard/logs ./local_logs |
路徑說明:
- 設備常用路徑:/sdcard/(外部存儲根目錄)、/data/data/<包名>/(應用私有目錄)
- 注意權限:訪問/data/data/下的文件可能需要 root 權限
實戰示例:
# 推送本地圖片到設備相冊
adb push ./photo.jpg /sdcard/DCIM/Camera/# 拉取應用緩存文件到本地
adb pull /data/data/com.example.myapp/cache/ ./app_cache
設備內部文件操作
結合adb shell可執行設備內部的文件操作:
# 進入設備shell環境
adb shell# 查看目錄內容
ls /sdcard/# 創建目錄
mkdir /sdcard/testdir# 移動文件
mv /sdcard/file1.txt /sdcard/testdir/# 復制文件
cp /sdcard/file1.txt /sdcard/testdir/file2.txt# 刪除文件
rm /sdcard/test.txt# 查看文件內容
cat /sdcard/log.txt# 退出shell
exit
注意:部分目錄操作需要 root 權限,可通過adb root獲取(僅適用于已 root 設備或模擬器)
五、調試與診斷指令
日志查看
指令 | 功能 | 示例 |
adb logcat | 查看系統日志 | - |
adb logcat -s <標簽> | 過濾指定標簽的日志 | adb logcat -s MyAppTag |
adb logcat <包名>:<級別> *:S | 過濾指定應用的日志 | adb logcat com.example.myapp:V *:S |
adb logcat > log.txt | 將日志保存到文件 | - |
adb logcat -c | 清除日志緩存 | - |
日志級別(從低到高):
- V(Verbose):詳細信息(默認)
- D(Debug):調試信息
- I(Info):普通信息
- W(Warn):警告信息
- E(Error):錯誤信息
- F(Fatal):致命錯誤
- S(Silent):無輸出
實戰示例:
# 只顯示應用的錯誤日志
adb logcat com.example.myapp:E *:S# 顯示所有錯誤級別以上的日志并保存
adb logcat *:E > error_log.txt
進程與性能監控
指令 | 功能 | 示例 |
adb shell ps | 查看設備進程列表 | `adb shell ps |
adb shell top | 實時查看進程 CPU 占用 | adb shell top -m 10(顯示前 10 個進程) |
adb shell dumpsys cpuinfo | 查看 CPU 使用情況 | `adb shell dumpsys cpuinfo |
adb shell dumpsys meminfo <包名> | 查看應用內存使用 | adb shell dumpsys meminfo com.example.myapp |
adb shell dumpsys gfxinfo <包名> | 查看應用渲染性能 | adb shell dumpsys gfxinfo com.example.myapp |
實用技巧:
- adb shell top -d 3:每 3 秒刷新一次進程信息
- adb shell dumpsys meminfo:不加包名可查看系統整體內存使用
- adb shell dumpsys gfxinfo <包名> reset:重置渲染性能統計
屏幕與截圖
指令 | 功能 | 示例 |
adb shell screencap <路徑> | 截取屏幕并保存到設備 | adb shell screencap /sdcard/screenshot.png |
adb exec-out screencap -p > screenshot.png | 直接截取屏幕到電腦 | - |
adb shell screenrecord <路徑> | 錄制屏幕視頻 | adb shell screenrecord /sdcard/demo.mp4 |
adb pull /sdcard/demo.mp4 | 將錄制的視頻拉取到電腦 | - |
屏幕錄制參數:
- --time-limit 30:限制錄制時長(默認 180 秒)
- --bit-rate 4M:設置比特率(默認 4Mbps)
- --size 1280x720:設置錄制分辨率
示例:
# 錄制60秒,比特率8Mbps的視頻
adb shell screenrecord --time-limit 60 --bit-rate 8M /sdcard/gameplay.mp4# 直接截圖到電腦
adb exec-out screencap -p > current_screen.png
六、系統與高級指令
系統信息與控制
指令 | 功能 | 示例 |
adb shell getprop | 查看所有系統屬性 | `adb shell getprop |
adb shell setprop <屬性名> <值> | 設置系統屬性(需 root) | - |
adb shell getevent | 查看輸入事件(如按鍵、觸摸) | - |
adb shell input <命令> | 模擬輸入事件 | adb shell input tap 500 1000(點擊屏幕坐標) |
adb shell dumpsys | 查看系統服務狀態 | adb shell dumpsys battery(電池狀態) |
adb shell date <時間> | 設置系統時間(需 root) | adb shell date 20231231.235959 |
模擬輸入示例:
# 點擊屏幕坐標(500, 1000)
adb shell input tap 500 1000# 滑動屏幕(從(100,500)到(900,500))
adb shell input swipe 100 500 900 500 500(持續500ms)# 輸入文本
adb shell input text "HelloADB"# 按電源鍵
adb shell input keyevent KEYCODE_POWER# 按返回鍵
adb shell input keyevent KEYCODE_BACK
權限與 root 相關
指令 | 功能 | 適用場景 |
adb root | 以 root 權限重啟 ADB | 已 root 設備獲取高級權限 |
adb unroot | 退出 root 權限 | 恢復普通用戶模式 |
adb shell su -c <命令> | 以 root 權限執行命令 | adb shell su -c rm /system/app/XXX |
adb shell pm grant <包名> <權限> | 授予應用權限 | adb shell pm grant com.example.myapp android.permission.WRITE_SECURE_SETTINGS |
adb shell pm revoke <包名> <權限> | 撤銷應用權限 | adb shell pm revoke com.example.myapp android.permission.CAMERA |
注意:
- 大部分設備需要解鎖 Bootloader 才能獲取 root 權限
- pm grant只能授予應用在 Manifest 中聲明的權限
- 特殊權限(如WRITE_SECURE_SETTINGS)需通過 ADB 或 root 授予
七、實用技巧與常見問題
提高效率的技巧
1.別名設置:為常用指令設置別名(如在.bashrc 中):
alias adbip='adb connect 192.168.1.100:5555'
alias adbl='adb logcat -s MyApp'
alias adbs='adb shell'
2.多設備操作:當連接多個設備時,用-s指定設備:
adb -s 192.168.1.100:5555 install app.apk
adb -s emulator-5554 shell
3.命令組合:結合管道符實現復雜功能:
# 查找應用進程并殺死
adb shell ps | grep com.example.myapp | awk '{print $2}' | xargs adb shell kill
4.ADB 路徑自動補全:配置 bash 自動補全腳本,支持指令和路徑補全
常見問題解決
1.設備連接失敗(offline 狀態):
- 解決方案:重啟 ADB 服務器(adb kill-server && adb start-server)
- 重新插拔 USB 線或重啟設備
2.無權限訪問設備(no permissions):
- Windows:在設備上授權 USB 調試
- Linux/macOS:執行sudo chmod 777 /dev/bus/usb/<設備路徑>(路徑可通過lsusb查看)
3.應用安裝失敗(INSTALL_FAILED_XXX):
- INSTALL_FAILED_INSUFFICIENT_STORAGE:設備存儲空間不足
- INSTALL_FAILED_VERIFICATION_FAILURE:關閉 "驗證應用" 選項
- INSTALL_FAILED_UPDATE_INCOMPATIBLE:先卸載舊版本再安裝
4.無線連接超時:
- 確保設備與電腦在同一網絡
- 檢查防火墻設置,允許 5555 端口通信
- 嘗試重啟設備的網絡或 ADB 服務
八、總結
ADB 是 Android 開發的瑞士軍刀,掌握這些指令能顯著提升日常開發和調試效率。本文涵蓋了設備管理、應用操作、文件傳輸、調試診斷等核心場景的常用指令,建議初學者從基礎指令開始練習,逐步掌握高級用法。
實際使用中,不必死記硬背所有指令,可將本文作為速查表隨時查閱。隨著使用頻率增加,自然會熟練掌握常用命令。ADB 的強大之處在于其靈活性,通過組合不同指令,能解決幾乎所有設備交互問題,是每個 Android 開發者必備的技能。