Android ADB 完全使用指南

Android ADB 完全使用指南

ADB(Android Debug Bridge)是一个通用的命令行工具,它允许你与 Android 设备进行通信。ADB 是 Android SDK 的一部分,提供了对设备的广泛控制能力。


目录

  1. [ADB 安装](#ADB 安装)
  2. [如何使用 ADB](#如何使用 ADB)
  3. 常用命令大全
  4. 常见问题排查
  5. 最佳实践

1. ADB 安装

1.1 Windows 安装

方法一:通过 Android Studio 安装(推荐)
  1. 下载并安装 Android Studio
  2. 打开 Android Studio → SDK Manager(Tools > SDK Manager)
  3. 在 SDK Tools 标签页中勾选 Android SDK Platform-Tools
  4. 点击 Apply 安装
方法二:独立安装 Platform Tools
  1. 下载 SDK Platform Tools
  2. 解压到任意目录(如 C:\platform-tools
  3. 配置环境变量:
    • 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
    • 在 Path 中添加 platform-tools 目录路径
    • 例如:C:\Users\YourName\AppData\Local\Android\Sdk\platform-tools
验证安装
bash 复制代码
adb --version

1.2 macOS 安装

方法一:通过 Homebrew 安装(推荐)
bash 复制代码
# 安装 Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 ADB
brew install android-platform-tools
方法二:通过 Android Studio 安装

与 Windows 相同,通过 SDK Manager 安装 Platform Tools。

方法三:手动安装
bash 复制代码
# 下载并解压
curl -O https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
unzip platform-tools-latest-darwin.zip

# 移动到合适位置并配置环境变量
mv platform-tools ~/Library/Android/sdk/
echo 'export PATH=$PATH:~/Library/Android/sdk/platform-tools' >> ~/.zshrc
source ~/.zshrc
验证安装
bash 复制代码
adb --version

1.3 Linux 安装

Ubuntu / Debian
bash 复制代码
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
Fedora / CentOS / RHEL
bash 复制代码
sudo dnf install android-tools
Arch Linux
bash 复制代码
sudo pacman -S android-tools
手动安装
bash 复制代码
# 下载
curl -O https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools-latest-linux.zip

# 配置环境变量
sudo mv platform-tools /opt/
echo 'export PATH=$PATH:/opt/platform-tools' >> ~/.bashrc
source ~/.bashrc
验证安装
bash 复制代码
adb --version

2. 如何使用 ADB

2.1 启用设备的 USB 调试

在使用 ADB 前,需要在 Android 设备上启用开发者选项和 USB 调试:

  1. 开启开发者选项

    • 进入 设置 → 关于手机
    • 连续点击"版本号"7 次,直到提示"您已处于开发者模式"
  2. 开启 USB 调试

    • 进入 设置 → 系统 → 开发者选项
    • 打开 USB 调试 开关
    • (可选)打开 OEM 解锁(如需刷机)
  3. 连接设备

    • 使用 USB 线连接电脑和手机
    • 在手机上允许 USB 调试授权

2.2 基本工作流程

bash 复制代码
# 1. 检查设备是否连接成功
adb devices

# 2. 进入设备 shell
adb shell

# 3. 执行具体命令...

# 4. 退出 shell
exit

2.3 ADB 架构理解

复制代码
┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│   ADB 客户端  │ ←──→ │   ADB 服务器  │ ←──→ │  ADB 守护进程  │
│  (你的电脑)   │      │  (后台进程)   │      │  (Android设备) │
└─────────────┘      └─────────────┘      └─────────────┘
  • ADB Client:运行在开发机器上,发送命令
  • ADB Server:运行在开发机器上的后台进程,管理客户端与守护进程通信
  • ADBD(ADB Daemon):运行在 Android 设备上的后台进程

2.4 无线调试(Wi-Fi)

Android 11+ 支持无需 USB 的无线调试:

bash 复制代码
# 方式一:通过配对码连接(Android 11+)
# 1. 在手机上开启无线调试并选择"使用配对码配对"
# 2. 执行:
adb pair IP:端口
# 输入配对码

# 方式二:传统方式(需要先用USB连接一次)
# 1. 确保手机和电脑在同一WiFi
# 2. 先用USB连接设备
adb tcpip 5555        # 切换为网络模式
adb connect 192.168.x.x:5555  # 连接设备IP
# 3. 现在可以拔掉USB线了

3. 常用命令大全

3.1 设备管理命令

命令 说明
adb devices 列出所有已连接的设备
adb devices -l 列出设备详细信息(含设备型号)
adb get-serialno 获取设备的序列号
adb get-state 获取设备状态(device/offline/recovery/bootloader)
adb kill-server 终止 ADB 服务器
adb start-server 启动 ADB 服务器
adb reconnect 重新连接设备
adb connect <IP>:<端口> 通过网络连接设备(默认端口5555)
adb disconnect <IP>:<端口> 断开网络连接的设备
adb usb 将设备切换回 USB 模式
adb tcpip <端口> 将设备切换为网络模式,监听指定端口
bash 复制代码
# 示例:查看已连接设备
adb devices
# 输出示例:
# List of devices attached
# xxxxxxxx    device
# emulator-5554   device

# 示例:连接网络设备
adb connect 192.168.1.100:5555

# 示例:查看设备详细信息
adb devices -l
# 输出包含:序列号、状态、product、model、device、transport_id

3.2 多设备操作

当连接多个设备时,需要使用 -s 参数指定设备:

bash 复制代码
# 语法:adb -s <序列号> <命令>

# 示例:向指定设备安装应用
adb -s emulator-5554 install app.apk

# 示例:进入指定设备的 shell
adb -s xxxxxxxx shell

# 示例:向指定设备传输文件
adb -s xxxxxxxx push file.txt /sdcard/

3.3 应用管理(Package Manager)

安装与卸载
命令 说明
adb install <apk路径> 安装 APK
adb install -r <apk路径> 覆盖安装(保留数据)
adb install -d <apk路径> 允许降级安装
adb install -g <apk路径> 授予所有运行时权限
adb install -t <apk路径> 允许安装测试包
adb install-multiple <apk1> <apk2> 安装多个 APK(split APK)
adb uninstall <包名> 卸载应用
adb uninstall -k <包名> 卸载但保留数据和缓存
bash 复制代码
# 示例:安装应用
adb install /path/to/app.apk

# 示例:覆盖安装(更新应用,保留数据)
adb install -r /path/to/app.apk

# 示例:完整安装(覆盖+授予权限+测试包)
adb install -r -g -t /path/to/app.apk

# 示例:卸载应用
adb uninstall com.example.app

# 示例:卸载但保留数据(重新安装后数据还在)
adb uninstall -k com.example.app
包信息查询
bash 复制代码
# 列出所有已安装包
adb shell pm list packages

# 只列出系统应用
adb shell pm list packages -s

# 只列出第三方应用
adb shell pm list packages -3

# 列出包含特定关键字的包
adb shell pm list packages | grep "wechat"

# 显示包安装位置
adb shell pm list packages -f

# 显示包的详细信息
adb shell dumpsys package com.example.app

# 查看某个包的 APK 路径
adb shell pm path com.example.app

# 清除应用数据(相当于在设置中清除数据)
adb shell pm clear com.example.app

# 查看应用的权限
adb shell dumpsys package com.example.app | grep permission
应用状态管理
bash 复制代码
# 强制停止应用
adb shell am force-stop com.example.app

# 启动应用的某个 Activity
adb shell am start -n com.example.app/.MainActivity

# 启动应用并传递参数
adb shell am start -n com.example.app/.MainActivity -e key value

# 启动服务
adb shell am startservice -n com.example.app/.MyService

# 发送广播
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

# 结束广播接收器
adb shell am stop-service -n com.example.app/.MyService

3.4 文件传输

命令 说明
adb push <本地路径> <设备路径> 从电脑推送文件到设备
adb pull <设备路径> [本地路径] 从设备拉取文件到电脑
adb sync 同步目录(需配合 $ANDROID_PRODUCT_OUT 使用)
bash 复制代码
# 示例:推送文件到设备
adb push /Users/name/file.txt /sdcard/Download/

# 示例:推送整个目录
adb push /Users/name/folder/ /sdcard/Download/folder/

# 示例:从设备拉取文件到当前目录
adb pull /sdcard/Download/file.txt .

# 示例:从设备拉取文件到指定路径
adb pull /sdcard/DCIM/Camera/photo.jpg ~/Desktop/

# 示例:拉取整个目录
adb pull /sdcard/DCIM/ ~/Desktop/backup/

# 示例:拉取应用数据(需要root)
adb pull /data/data/com.example.app/ ~/backup/app_data/

3.5 Shell 命令

进入交互式 Shell
bash 复制代码
# 进入设备 shell(默认进入用户shell)
adb shell

# 以 root 权限进入 shell(需要设备已root)
adb shell su

# 执行单条 shell 命令
adb shell <命令>

# 示例:查看设备型号
adb shell getprop ro.product.model

# 示例:查看 Android 版本
adb shell getprop ro.build.version.release

# 示例:查看 SDK 版本
adb shell getprop ro.build.version.sdk
常用 Shell 命令
bash 复制代码
# 文件操作
adb shell ls -la /sdcard/           # 列出目录内容
adb shell cat /proc/cpuinfo         # 查看 CPU 信息
adb shell df                        # 查看磁盘空间
adb shell du -sh /sdcard/           # 查看目录大小
adb shell mkdir /sdcard/new_folder  # 创建目录
adb shell rm -rf /sdcard/temp       # 删除文件/目录
adb shell cp /sdcard/a.txt /sdcard/b.txt  # 复制文件
adb shell mv /sdcard/old /sdcard/new      # 移动/重命名

# 查看系统信息
adb shell cat /proc/meminfo         # 查看内存信息
adb shell cat /proc/cpuinfo         # 查看 CPU 详细信息
adb shell uptime                    # 查看运行时间
adb shell whoami                    # 查看当前用户
adb shell id                        # 查看用户ID和组ID
adb shell ps                        # 查看进程列表
adb shell ps -A | grep com.android  # 过滤特定进程
adb shell top                       # 实时查看进程资源占用

# 网络相关
adb shell ifconfig                  # 查看网络接口
adb shell ip addr                   # 查看 IP 地址(新版Android)
adb shell ping www.google.com       # 测试网络连通性
adb shell netstat                   # 查看网络连接状态
adb shell cat /data/misc/wifi/*.conf  # 查看 WiFi 配置(需要root)

# 系统属性
adb shell getprop                   # 列出所有系统属性
adb shell getprop ro.serialno       # 获取序列号
adb shell getprop ro.build.version.release  # 获取 Android 版本
adb shell setprop <key> <value>     # 设置系统属性(临时,重启失效)

3.6 日志相关

Logcat(日志查看)
命令 说明
adb logcat 查看实时日志
adb logcat -d 查看日志后退出(不持续监听)
adb logcat -c 清除日志缓冲区
adb logcat -s <标签> 过滤特定标签
adb logcat *:<级别> 按日志级别过滤
adb logcat -f <文件> 保存日志到设备文件
bash 复制代码
# 日志级别(从低到高):
# V - Verbose(最详细)
# D - Debug
# I - Info
# W - Warn
# E - Error
# F - Fatal
# S - Silent(最高,不输出任何内容)

# 示例:查看实时日志
adb logcat

# 示例:只查看 Error 级别以上日志
adb logcat *:E

# 示例:过滤特定 TAG(显示 MyApp 的 Debug 以上日志)
adb logcat -s MyApp:D

# 示例:过滤多个 TAG
adb logcat -s MyApp:D System.out:I

# 示例:将日志保存到文件
adb logcat -d > ~/Desktop/log.txt

# 示例:持续保存日志到文件
adb logcat | tee ~/Desktop/live_log.txt

# 示例:查看特定应用的日志(通过PID)
adb shell pidof com.example.app | xargs -I {} adb logcat --pid={}

# 示例:清除日志后查看
adb logcat -c && adb logcat

# 示例:查看崩溃日志(Fatal 和 Error)
adb logcat AndroidRuntime:E *:S

# 示例:查看带有时间戳的日志
adb logcat -v time

# 示例:查看带进程ID的日志
adb logcat -v process

# 示例:查看线程日志
adb logcat -v threadtime

# 示例:彩色输出日志
adb logcat -v color

# 示例:格式化长消息(不换行截断)
adb logcat -v long
缓冲区类型
bash 复制代码
# Android 有多个日志缓冲区:
# main    - 主应用日志(默认)
# system  - 系统日志
# radio   - 射频/通话相关日志
# events  - 系统事件日志
# crash   - 崩溃日志
# kernel  - 内核日志(需要root)

# 查看指定缓冲区的日志
adb logcat -b main      # 主日志
adb logcat -b system    # 系统日志
adb logcat -b radio     # 射频日志
adb logcat -b events    # 事件日志
adb logcat -b crash     # 崩溃日志
adb logcat -b all       # 所有缓冲区

# 示例:查看系统崩溃日志
adb logcat -b crash -d

# 示例:同时查看 main 和 system
adb logcat -b main -b system
Dumpsys(系统服务信息)
bash 复制代码
# 查看所有可用服务
adb shell dumpsys -l

# 查看电池状态
adb shell dumpsys battery

# 查看电池设置(是否忽略电池优化)
adb shell dumpsys deviceidle

# 查看内存使用情况
adb shell dumpsys meminfo

# 查看特定应用的内存
adb shell dumpsys meminfo com.example.app

# 查看 CPU 使用情况
adb shell dumpsys cpuinfo

# 查看 Activity 状态
adb shell dumpsys activity

# 查看当前显示的 Activity
adb shell dumpsys activity top

# 查看窗口管理器
adb shell dumpsys window

# 查看显示信息
adb shell dumpsys display

# 查看通知
adb shell dumpsys notification

# 查看电源管理
adb shell dumpsys power

# 查看存储状态
adb shell dumpsys storage

# 查看网络状态
adb shell dumpsys connectivity
adb shell dumpsys wifi
adb shell dumpsys netstats

# 查看输入设备
adb shell dumpsys input

# 查看位置服务
adb shell dumpsys location

3.7 屏幕操作

截图
bash 复制代码
# 截图并保存到设备
adb shell screencap /sdcard/screenshot.png

# 截图并直接拉取到电脑
adb shell screencap -p /sdcard/screenshot.png && adb pull /sdcard/screenshot.png ~/Desktop/

# 一行命令截图到电脑(使用管道)
adb exec-out screencap -p > ~/Desktop/screenshot.png

# 截图并直接复制到剪贴板(macOS)
adb exec-out screencap -p | pbcopy
录屏
bash 复制代码
# 开始录屏(默认录制 180 秒,最长 180 秒)
adb shell screenrecord /sdcard/video.mp4

# 设置录制时长(秒)
adb shell screenrecord --time-limit 30 /sdcard/video.mp4

# 设置视频尺寸
adb shell screenrecord --size 1280x720 /sdcard/video.mp4

# 设置比特率(默认 4Mbps)
adb shell screenrecord --bit-rate 8000000 /sdcard/video.mp4

# 显示触摸反馈(录屏时显示点击位置)
adb shell screenrecord --show-touches /sdcard/video.mp4

# 拉取录屏文件
adb pull /sdcard/video.mp4 ~/Desktop/

# 停止录屏(按 Ctrl+C)

3.8 按键与输入模拟

输入文本
bash 复制代码
# 输入文本(不支持中文,中文需要用其他方式)
adb shell input text "HelloWorld"

# 输入带空格的内容(空格用 %s 代替)
adb shell input text "Hello%sworld"

# 输入特殊字符(使用 KeyEvent)
按键事件(KeyEvent)
bash 复制代码
# 常用按键代码:
# 3    - HOME 键
# 4    - 返回键
# 24   - 音量加
# 25   - 音量减
# 26   - 电源键
# 27   - 相机键
# 66   - 回车键
# 67   - 删除键
# 82   - 菜单键
# 187  - 最近任务键
# 220  - 亮度降低
# 221  - 亮度增加
# 223  - 使设备休眠
# 224  - 唤醒设备

# 示例:按返回键
adb shell input keyevent 4

# 示例:按 HOME 键
adb shell input keyevent 3

# 示例:按电源键
adb shell input keyevent 26

# 示例:增加音量
adb shell input keyevent 24

# 示例:降低音量
adb shell input keyevent 25

# 示例:打开最近任务
adb shell input keyevent 187

# 示例:组合键(Ctrl+C 需要先按 Ctrl,再按 C,再释放)
# 注意:input 命令不支持真正的组合键,需要借助其他工具
触摸与滑动
bash 复制代码
# 点击屏幕坐标 (x, y)
adb shell input tap 500 800

# 滑动屏幕(从 x1,y1 滑动到 x2,y2)
adb shell input swipe 300 1000 300 500

# 长按(滑动起点和终点相同,持续时间 1000ms)
adb shell input swipe 500 800 500 800 1000

# 快速滑动(模拟列表滚动)
adb shell input swipe 500 1500 500 500 100

3.9 系统操作

重启设备
bash 复制代码
# 普通重启
adb reboot

# 重启到 Recovery 模式
adb reboot recovery

# 重启到 Bootloader/Fastboot 模式
adb reboot bootloader

# 重启到 Sideload 模式(用于OTA更新)
adb reboot sideload
关机和唤醒
bash 复制代码
# 让设备休眠(模拟按电源键)
adb shell input keyevent 26

# 唤醒设备
adb shell input keyevent 224

# 通过 root 命令关机(需要root)
adb shell su -c "reboot -p"
设置修改
bash 复制代码
# 修改屏幕亮度(0-255)
adb shell settings put system screen_brightness 200

# 修改屏幕超时时间(毫秒)
adb shell settings put system screen_off_timeout 300000

# 获取设置值
adb shell settings get system screen_brightness

# 全局设置
adb shell settings put global adb_enabled 1

# 安全设置
adb shell settings put secure show_ime_with_hard_keyboard 1
时间设置
bash 复制代码
# 设置日期时间(需要root)
adb shell su -c "date -s 202401011200.00"

# 查看当前时间
adb shell date

3.10 权限管理

bash 复制代码
# 授予权限
adb shell pm grant com.example.app android.permission.CAMERA

# 撤销权限
adb shell pm revoke com.example.app android.permission.CAMERA

# 重置所有权限(恢复到安装时的默认状态)
adb shell pm reset-permissions -p com.example.app

# 查看应用的权限状态
adb shell dumpsys package com.example.app | grep -A 20 "permissions"

# 常见危险权限:
# android.permission.CAMERA
# android.permission.RECORD_AUDIO
# android.permission.ACCESS_FINE_LOCATION
# android.permission.READ_CONTACTS
# android.permission.READ_EXTERNAL_STORAGE
# android.permission.WRITE_EXTERNAL_STORAGE
# android.permission.READ_PHONE_STATE
# android.permission.SEND_SMS

3.11 备份与恢复

bash 复制代码
# 完整备份(需要确认备份密码,会弹窗)
adb backup -apk -shared -all -f ~/backup.ab

# 备份参数说明:
# -apk      包含 APK 安装包
# -noapk    不包含 APK(只备份数据)
# -shared   包含共享存储(/sdcard)
# -noshared 不包含共享存储
# -all      备份所有应用
# -system   包含系统应用
# -nosystem 不包含系统应用
# -f <文件>  指定备份文件路径

# 备份单个应用
adb backup -apk -f ~/app_backup.ab com.example.app

# 恢复备份
adb restore ~/backup.ab

# 注意:Android 12+ 可能限制了 adb backup 的功能

3.12 数据库操作

bash 复制代码
# 进入应用的 SQLite 数据库目录(需要root或调试版本)
adb shell
run-as com.example.app

# 打开数据库
cd databases
sqlite3 app_database.db

# SQLite 命令
.tables                    # 列出所有表
.schema table_name         # 查看表结构
select * from table_name;  # 查询数据
.exit                      # 退出 sqlite3

# 或者直接执行 SQL
adb shell "run-as com.example.app sqlite3 databases/app.db 'select * from users;'"

# 导出数据库到电脑
adb exec-out run-as com.example.app cat databases/app.db > ~/Desktop/app.db

3.13 网络命令

bash 复制代码
# 查看设备 IP 地址
adb shell ifconfig wlan0
adb shell ip addr show wlan0

# 端口转发(将设备的端口映射到电脑)
adb forward tcp:8080 tcp:8080

# 反向端口转发(将电脑的端口映射到设备)
adb reverse tcp:3000 tcp:3000

# 查看端口转发列表
adb forward --list

# 移除端口转发
adb forward --remove tcp:8080

# 移除所有端口转发
adb forward --remove-all

# 示例:在电脑上访问设备上的 Web 服务
adb forward tcp:8080 tcp:8080
# 然后在电脑浏览器访问 http://localhost:8080

# 示例:设备访问电脑上的开发服务器
adb reverse tcp:3000 tcp:3000
# 然后在设备上访问 http://localhost:3000

3.14 IMEI 与设备信息

bash 复制代码
# 查看设备序列号
adb get-serialno

# 查看设备型号
adb shell getprop ro.product.model

# 查看设备制造商
adb shell getprop ro.product.manufacturer

# 查看 Android 版本
adb shell getprop ro.build.version.release

# 查看 SDK 版本号
adb shell getprop ro.build.version.sdk

# 查看系统版本号
adb shell getprop ro.build.display.id

# 查看设备代号
adb shell getprop ro.product.device

# 查看设备品牌
adb shell getprop ro.product.brand

# 查看安全补丁级别
adb shell getprop ro.build.version.security_patch

# 查看基带版本
adb shell getprop gsm.version.baseband

# 查看 IMEI(需要 root 或特殊权限)
adb shell service call iphonesubinfo 1
# 或者
adb shell "dumpsys telephony.registry | grep DeviceId"

3.15 性能与调试

bash 复制代码
# 查看内存使用情况
adb shell dumpsys meminfo

# 查看特定进程内存
adb shell dumpsys meminfo com.example.app

# 查看实时内存分配(需要 Android Studio Profiler 或简化版)
adb shell am dumpheap com.example.app /sdcard/heap.hprof
adb pull /sdcard/heap.hprof ~/Desktop/

# 查看帧率(需要开发者选项开启 GPU 分析)
adb shell dumpsys gfxinfo com.example.app

# 查看电池消耗
adb shell dumpsys batterystats com.example.app

# 重置电池统计数据
adb shell dumpsys batterystats --reset

# 查看 CPU 使用率
adb shell dumpsys cpuinfo

# 使用 top 查看实时 CPU
adb shell top -m 10

# 查看正在运行的服务
adb shell dumpsys activity services

# 查看 Activity 栈
adb shell dumpsys activity activities

3.16 快速调试技巧

bash 复制代码
# 清除应用数据并重新启动
adb shell pm clear com.example.app && adb shell am start -n com.example.app/.MainActivity

# 查看当前 Activity(快速获取当前界面)
adb shell dumpsys activity top | grep ACTIVITY

# 强制停止并重启应用
adb shell am force-stop com.example.app && sleep 1 && adb shell am start -n com.example.app/.MainActivity

# 模拟杀进程后恢复(测试数据持久化)
adb shell am kill com.example.app

# 查看应用启动时间
adb shell am start -W -n com.example.app/.MainActivity

# 测量冷启动时间
adb shell am force-stop com.example.app
adb shell am start -W -n com.example.app/.MainActivity | grep TotalTime

3.17 Fastboot 模式命令

当设备处于 Bootloader/Fastboot 模式时,使用 fastboot 命令:

bash 复制代码
# 查看 fastboot 设备
fastboot devices

# 解锁 Bootloader(会清除数据!)
fastboot oem unlock
fastboot flashing unlock

# 锁定 Bootloader
fastboot oem lock
fastboot flashing lock

# 刷入分区镜像
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash recovery recovery.img

# 刷入完整 ROM(所有分区)
fastboot flashall

# 擦除分区
fastboot erase userdata
fastboot erase cache

# 格式化分区
fastboot format userdata

# 启动临时镜像(不刷入)
fastboot boot recovery.img

# 重启设备
fastboot reboot
fastboot reboot recovery
fastboot reboot bootloader

# 获取设备信息
fastboot getvar all

4. 常见问题排查

4.1 设备无法识别

bash 复制代码
# 1. 检查 ADB 服务器是否运行
adb start-server

# 2. 检查设备是否授权(手机上是否弹出允许调试的对话框)
adb devices
# 如果显示 unauthorized,需要在手机上点击允许

# 3. 重新插拔 USB 或更换接口/线缆

# 4. 检查设备管理器(Windows)或系统信息(Mac)中设备是否正常识别

# 5. 尝试切换 USB 连接模式(文件传输/MTP 模式)

4.2 权限被拒绝(Permission Denied)

bash 复制代码
# 某些目录需要 root 权限
adb shell
su                    # 获取 root 权限(设备需要已root)
cd /data/data         # 现在可以访问了

# 如果无法 root,可以使用 run-as(仅限 debug 签名的应用)
run-as com.example.app

4.3 端口被占用

bash 复制代码
# ADB 默认使用 5037 端口
# Windows:查找并结束占用进程
netstat -ano | findstr 5037
taskkill /PID <进程ID> /F

# macOS/Linux
lsof -i :5037
kill -9 <进程ID>

# 然后重启 ADB 服务器
adb kill-server
adb start-server

4.4 离线设备(offline)

bash 复制代码
# 1. 重启 ADB 服务器
adb kill-server
adb start-server

# 2. 重新插拔设备

# 3. 检查设备 USB 调试是否开启

# 4. 尝试切换网络模式再切换回来
adb tcpip 5555
adb usb

4.5 连接超时

bash 复制代码
# 无线网络调试时可能超时
# 1. 确保设备和电脑在同一网络
# 2. 防火墙允许 ADB 端口(5037)
# 3. 重新连接
adb disconnect
adb connect 192.168.x.x:5555

5. 最佳实践

5.1 效率技巧

bash 复制代码
# 1. 在 ~/.bashrc 或 ~/.zshrc 中添加别名
alias adbd='adb devices'
alias adbs='adb shell'
alias adbl='adb logcat'
alias adbi='adb install -r'
alias adbu='adb uninstall'

# 2. 使用 grep 过滤日志
adb logcat | grep "MyAppTag"

# 3. 将常用命令写成脚本
# 例如:logcat.sh
#!/bin/bash
adb logcat -c
adb logcat -v threadtime | tee "log_$(date +%Y%m%d_%H%M%S).txt"

# 4. 使用 Android Studio 的 Logcat 工具进行图形化过滤

5.2 安全注意事项

  1. 不要随意外借开启了 USB 调试的设备 --- 他人可能通过 ADB 获取你的数据
  2. 公共场合关闭 USB 调试 --- 防止恶意充电站攻击
  3. 使用无线网络调试时注意网络安全 --- 确保在可信任的 WiFi 下使用
  4. 生产环境应用移除调试信息 --- 发布前关闭日志输出或降低日志级别
  5. 谨慎执行 adb shell 命令 --- 错误的命令可能导致数据丢失

5.3 开发调试流程建议

复制代码
1. 连接设备
   adb devices

2. 安装/更新应用
   adb install -r app.apk

3. 清除旧日志
   adb logcat -c

4. 打开日志监听(新开终端)
   adb logcat -s MyAppTag:D

5. 启动应用测试
   adb shell am start -n com.example.app/.MainActivity

6. 遇到问题保存日志
   adb logcat -d > bug_report.txt

7. 截图/录屏保存现场
   adb exec-out screencap -p > screenshot.png

8. 导出数据库排查(如需要)
   adb exec-out run-as com.example.app cat databases/app.db > app.db

附录:常用命令速查表

功能 命令
查看设备 adb devices -l
安装应用 adb install -r app.apk
卸载应用 adb uninstall com.example.app
进入 Shell adb shell
查看日志 adb logcat -s TAG:D
推送文件 adb push local /device/path
拉取文件 adb pull /device/path local
截图 adb exec-out screencap -p > img.png
录屏 adb shell screenrecord /sdcard/v.mp4
点击屏幕 adb shell input tap x y
滑动屏幕 adb shell input swipe x1 y1 x2 y2
按键 adb shell input keyevent 4
启动 Activity adb shell am start -n pkg/.Activity
强制停止 adb shell am force-stop pkg
清除数据 adb shell pm clear pkg
端口转发 adb forward tcp:local tcp:device
重启设备 adb reboot
重启 Recovery adb reboot recovery
重启 Bootloader adb reboot bootloader
网络连接 adb connect IP:5555
断开网络 adb disconnect IP:5555

文档版本 :v1.0
最后更新 :2026-04-29
适用平台 :Windows / macOS / Linux
适用 Android 版本:Android 4.0+

相关推荐
儿歌八万首1 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil2 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙2 小时前
echarts,3d堆叠图
android·3d·echarts
李白的天不白3 小时前
如何项目发布到github上
android·vue.js
summerkissyou19873 小时前
Android-RTC、NTP 和 System Time(系统时间)
android
小书房3 小时前
Kotlin使用体验及理解1
android·开发语言·kotlin
撩得Android一次心动4 小时前
Android Navigation 组件全面讲解
android·jetpack·navigation
向阳是我4 小时前
Flutter Android 编译错误修复:JVM Target Compatibility 不一致问题记录
android·jvm·flutter
Kapaseker4 小时前
我想让同事知道我很懂 Compose 怎么办?
android·kotlin