Android ADB 常用指令全解析

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 開發者必備的技能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93324.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Rust 創建 32 位 DLL 的完整指南

使用 Rust 創建 32 位 DLL 的完整指南 在 Rust 中創建 32 位 DLL 需要特定的工具鏈配置和編譯選項。以下是詳細步驟和最佳實踐&#xff1a; 環境準備 1. 安裝 Rust 工具鏈 # 安裝 Rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安裝 32 位目標 rustu…

算法基礎 第3章 數據結構

1.單調棧 1.什么是單調棧 單調棧&#xff0c;即具有單調性的棧。 實現 #include <iostream> #include <stack> using namespace std; const int N 3e6 10; int a[N], n; void test1() {stack<int> st; // 維護?個單調遞增的棧for(int i 1; i < n; i…

[機器學習]08-基于邏輯回歸模型的鳶尾花數據集分類

使用sklearn的LogisticRegression多分類模型程序代碼&#xff1a;import numpy as np from sklearn.linear_model import LogisticRegression import matplotlib.pyplot as plt import matplotlib as mpl from sklearn import datasets from sklearn import preprocessing impo…

【STM32入門教程】stm32簡介

一、STM32簡介二、ARM三、stm32f103c8t6四、命名規則五、系統結構六、引腳定義七、啟動配置一般情況下&#xff0c;都是在flash開始程序&#xff0c;而啟動程序也可以進行配置在其他地方啟動程序&#xff0c;通過配置boot0和boot1來進行配置八、最小系統電路

SAE J2716多協議網關的硬件架構與實時協議轉換機制解析

本文解析符合SAE J2716標準的工業級協議轉換設備技術架構&#xff0c;通過拆解其四路雙向SENT通道與多總線&#xff08;CANFD/Ethernet/USB&#xff09;的實時交互機制、MicroSD獨立日志系統設計及模擬量動態映射方案&#xff0c;為汽車電子與工業通信開發者提供可復用的技術參…

VS2022+QT5.15.2+OCCT7.9.1的開發環境搭建流程

以下是VS2022 QT5.15.2 OCCT7.9.1開發環境搭建的完整流程&#xff1a; 一、安裝Visual Studio 2022 下載安裝程序 訪問VS官網下載Community版安裝組件 選擇"使用C的桌面開發"工作負載勾選&#xff1a; MSVC v143 - VS 2022 C x64/x86生成工具Windows 10 SDK (建議…

數據庫訪問模式詳解

數據庫訪問模式詳解數據庫訪問模式是軟件架構中數據訪問層&#xff08;Data Access Layer&#xff09;設計的核心&#xff0c;它定義了應用程序如何與數據庫進行交互的策略和方法。選擇合適的訪問模式對于系統的性能、可維護性、可擴展性、事務一致性和開發效率至關重要。不同的…

BGE向量算法

一、是什么 什么是BGE向量算法&#xff1f;先說說網上的概念吧。本文不講解太深的算法知識&#xff0c;主要講解如何用&#xff01; BGE&#xff08;BAAI General Embedding&#xff09;是北京智源研究院開源的“通用語義向量模型”。一句話&#xff1a;把中文或英文句子變成…

AI數據倉庫的核心優勢解析

內容概要本文旨在全面解析AI數據倉庫的核心優勢&#xff0c;為讀者提供清晰的框架。文章首先從基礎定義出發&#xff0c;探討其如何高效整合多源數據&#xff0c;并支持人工智能與機器學習應用。隨后&#xff0c;將詳細闡述處理TB級數據的能力&#xff0c;包括兼容結構化和非結…

具身智能Scaling Law缺失:機器人界的“摩爾定律“何時誕生?

8月9日&#xff0c;在世界機器人大會的演講臺上&#xff0c;宇樹科技創始人王興興談論到目前機器人運動控制領域存在的RL Scaling Law問題&#xff0c;他認為現在的機器人在學習一項新的技能時&#xff0c;往往都是需要從頭開始研究以及教學。而在未來更加希望的是能夠在原有的…

【跨越 6G 安全、防御與智能協作:從APT檢測到多模態通信再到AI代理語言革命】

跨越 6G 安全、防御與智能協作&#xff1a;從APT檢測到多模態通信再到AI代理語言革命引言單篇總結**2. Integrated Multimodal Sensing and Communication: Challenges, Technologies, and Architectures****3. Why do AI agents communicate in human language?**引言 在邁向…

微前端-解決MicroApp微前端內存泄露問題

前言 之前使用京東微前端框架MicroApp集成10個微前端的頁面到AngularJs的后臺管理系統中&#xff0c;每個微前端做成一個菜單&#xff0c;一共10個&#xff0c;每次打開都是一個新的微前端&#xff0c;但是發現打開的微前端越多&#xff0c;容易造成內存泄露&#xff0c;下面講…

線性代數 · 向量運算 | 叉乘 / 幾何意義 / 推導

注&#xff1a;本文為 “線性代數 向量運算” 相關合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 數學基礎 —— 向量運算&#xff08;叉乘&#xff09; keng_s 于 2016-08-05 17:17:57 發布 1_ 向量的叉乘 向量…

方法中只包含查詢操作需要添加事務嗎?

方法中只包含查詢操作需要添加事務嗎?絕大部分情況都不需要 是否需要為包含數據庫查詢操作的方法添加 @Transactional 注解,取決于業務需求和查詢操作的特性,不能一概而論。以下是具體分析: 一、不需要添加 @Transactional 的常見場景 如果查詢操作滿足以下條件,通常不需…

MTK平臺Wi-Fi學習--wifi channel 通過國家碼進行功率限制和wifi eFEM 基本配置和wifi Tx SEM問題

一. 國家碼可以用來限制功率上限,可以針對各國家實現By channel降功率的能力 可以通過country code來設置不同channel的power limit,操作方法如下: 在rlm_txpwr_init.h文件中g_rRlmPowerLimitConfiguration[]下添加需要限制功率的channel, 例如:國家碼CN,信道:CH1,po…

MedGemma: 多模態醫學文本與圖像處理的創新模型

MedGemma: 多模態醫學文本與圖像處理的創新模型 今天&#xff0c;我有幸參加了在上海舉行的Google 2025 I/O大會&#xff0c;這是一場充滿創新與突破的技術盛宴。作為全球最具影響力的科技大會之一&#xff0c;Google I/O每年都會吸引來自世界各地的開發者、企業領袖以及科技愛…

深入剖析 C++ STL 中的 std::list 容器

基本介紹在 C 標準庫&#xff08;STL&#xff09;中&#xff0c;std::list 是一個基于雙向鏈表實現的序列容器。它與 std::vector、std::deque 等連續存儲容器不同&#xff0c;提供了在序列中高效插入和刪除元素的能力&#xff0c;尤其是在序列中間位置操作時優勢明顯。1. std:…

大規模調用淘寶商品詳情 API 的分布式請求調度實踐

在電商數據分析、比價系統、選品工具等業務場景中&#xff0c;往往需要大規模調用淘寶商品詳情 API 以獲取商品標題、價格、銷量、評價等核心數據。然而&#xff0c;面對淘寶開放平臺的嚴格限流策略、海量商品 ID 的處理需求以及系統高可用要求&#xff0c;傳統的單節點調用方式…

在 Windows 系統中解決 Git 推送時出現的 Permission denied (publickey) 錯誤,請按照以下詳細步驟操作:

完整解決方案步驟&#xff1a; 1. 檢查并生成 SSH 密鑰 # 打開 Git Bash ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 全程按回車&#xff08;使用默認路徑&#xff0c;不設密碼&#xff09; 密鑰將生成在&#xff1a;C:\Users\<用戶名>\.ssh\ 目…

【入門級-算法-2、入門算法:枚舉法】

枚舉法&#xff08;Brute Force&#xff09;&#xff1a;是一種直接遍歷所有可能情況的算法思想&#xff0c;適合解決數據范圍較小的問題。它的核心是窮舉所有可能性&#xff0c;并檢查哪些情況符合要求。 枚舉法的基本思想&#xff1a;計算機主要功能&#xff0c;或者說它的優…