Android ADB常用命令

ADB 你天天用,但你真的把它用明白了吗?从底层通信到 30+ 个实战命令,一文把调试效率拉满(附日志分析套路)

目录


一、ADB 到底是什么

ADB 全称 Android Debug Bridge,本质上是一个调试桥梁------连接你的电脑和 Android 设备。它由三个组件构成:
#mermaid-svg-LDIC3qtGAJvGgj85{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LDIC3qtGAJvGgj85 .error-icon{fill:#552222;}#mermaid-svg-LDIC3qtGAJvGgj85 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LDIC3qtGAJvGgj85 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LDIC3qtGAJvGgj85 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LDIC3qtGAJvGgj85 .marker.cross{stroke:#333333;}#mermaid-svg-LDIC3qtGAJvGgj85 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LDIC3qtGAJvGgj85 p{margin:0;}#mermaid-svg-LDIC3qtGAJvGgj85 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster-label text{fill:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster-label span{color:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster-label span p{background-color:transparent;}#mermaid-svg-LDIC3qtGAJvGgj85 .label text,#mermaid-svg-LDIC3qtGAJvGgj85 span{fill:#333;color:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 .node rect,#mermaid-svg-LDIC3qtGAJvGgj85 .node circle,#mermaid-svg-LDIC3qtGAJvGgj85 .node ellipse,#mermaid-svg-LDIC3qtGAJvGgj85 .node polygon,#mermaid-svg-LDIC3qtGAJvGgj85 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LDIC3qtGAJvGgj85 .rough-node .label text,#mermaid-svg-LDIC3qtGAJvGgj85 .node .label text,#mermaid-svg-LDIC3qtGAJvGgj85 .image-shape .label,#mermaid-svg-LDIC3qtGAJvGgj85 .icon-shape .label{text-anchor:middle;}#mermaid-svg-LDIC3qtGAJvGgj85 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LDIC3qtGAJvGgj85 .rough-node .label,#mermaid-svg-LDIC3qtGAJvGgj85 .node .label,#mermaid-svg-LDIC3qtGAJvGgj85 .image-shape .label,#mermaid-svg-LDIC3qtGAJvGgj85 .icon-shape .label{text-align:center;}#mermaid-svg-LDIC3qtGAJvGgj85 .node.clickable{cursor:pointer;}#mermaid-svg-LDIC3qtGAJvGgj85 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LDIC3qtGAJvGgj85 .arrowheadPath{fill:#333333;}#mermaid-svg-LDIC3qtGAJvGgj85 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LDIC3qtGAJvGgj85 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LDIC3qtGAJvGgj85 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LDIC3qtGAJvGgj85 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LDIC3qtGAJvGgj85 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LDIC3qtGAJvGgj85 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster text{fill:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 .cluster span{color:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LDIC3qtGAJvGgj85 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LDIC3qtGAJvGgj85 rect.text{fill:none;stroke-width:0;}#mermaid-svg-LDIC3qtGAJvGgj85 .icon-shape,#mermaid-svg-LDIC3qtGAJvGgj85 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LDIC3qtGAJvGgj85 .icon-shape p,#mermaid-svg-LDIC3qtGAJvGgj85 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LDIC3qtGAJvGgj85 .icon-shape .label rect,#mermaid-svg-LDIC3qtGAJvGgj85 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LDIC3qtGAJvGgj85 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LDIC3qtGAJvGgj85 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LDIC3qtGAJvGgj85 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 手机端
电脑端
TCP :5037
USB / TCP :5555
adb client

命令行工具
adb server

后台进程 :5037
adbd

守护进程

  • adb client:你敲命令的那个终端,一敲完任务就交给 server,自己退出了
  • adb server:跑在电脑后台的进程,管理 client 和 daemon 之间的通信
  • adbd:跑在手机上的守护进程,真正执行命令的东西

你平时敲的 adb shelladb logcatadb install,全走这条路:client → server → adbd → 执行 → 原路结果返回。


二、ADB 的三层 C/S/D 架构

#mermaid-svg-gzJkXJI14IqRJjhm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gzJkXJI14IqRJjhm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gzJkXJI14IqRJjhm .error-icon{fill:#552222;}#mermaid-svg-gzJkXJI14IqRJjhm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gzJkXJI14IqRJjhm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gzJkXJI14IqRJjhm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gzJkXJI14IqRJjhm .marker.cross{stroke:#333333;}#mermaid-svg-gzJkXJI14IqRJjhm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gzJkXJI14IqRJjhm p{margin:0;}#mermaid-svg-gzJkXJI14IqRJjhm .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gzJkXJI14IqRJjhm .cluster-label text{fill:#333;}#mermaid-svg-gzJkXJI14IqRJjhm .cluster-label span{color:#333;}#mermaid-svg-gzJkXJI14IqRJjhm .cluster-label span p{background-color:transparent;}#mermaid-svg-gzJkXJI14IqRJjhm .label text,#mermaid-svg-gzJkXJI14IqRJjhm span{fill:#333;color:#333;}#mermaid-svg-gzJkXJI14IqRJjhm .node rect,#mermaid-svg-gzJkXJI14IqRJjhm .node circle,#mermaid-svg-gzJkXJI14IqRJjhm .node ellipse,#mermaid-svg-gzJkXJI14IqRJjhm .node polygon,#mermaid-svg-gzJkXJI14IqRJjhm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gzJkXJI14IqRJjhm .rough-node .label text,#mermaid-svg-gzJkXJI14IqRJjhm .node .label text,#mermaid-svg-gzJkXJI14IqRJjhm .image-shape .label,#mermaid-svg-gzJkXJI14IqRJjhm .icon-shape .label{text-anchor:middle;}#mermaid-svg-gzJkXJI14IqRJjhm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gzJkXJI14IqRJjhm .rough-node .label,#mermaid-svg-gzJkXJI14IqRJjhm .node .label,#mermaid-svg-gzJkXJI14IqRJjhm .image-shape .label,#mermaid-svg-gzJkXJI14IqRJjhm .icon-shape .label{text-align:center;}#mermaid-svg-gzJkXJI14IqRJjhm .node.clickable{cursor:pointer;}#mermaid-svg-gzJkXJI14IqRJjhm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gzJkXJI14IqRJjhm .arrowheadPath{fill:#333333;}#mermaid-svg-gzJkXJI14IqRJjhm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gzJkXJI14IqRJjhm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gzJkXJI14IqRJjhm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gzJkXJI14IqRJjhm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gzJkXJI14IqRJjhm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gzJkXJI14IqRJjhm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gzJkXJI14IqRJjhm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gzJkXJI14IqRJjhm .cluster text{fill:#333;}#mermaid-svg-gzJkXJI14IqRJjhm .cluster span{color:#333;}#mermaid-svg-gzJkXJI14IqRJjhm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gzJkXJI14IqRJjhm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gzJkXJI14IqRJjhm rect.text{fill:none;stroke-width:0;}#mermaid-svg-gzJkXJI14IqRJjhm .icon-shape,#mermaid-svg-gzJkXJI14IqRJjhm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gzJkXJI14IqRJjhm .icon-shape p,#mermaid-svg-gzJkXJI14IqRJjhm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gzJkXJI14IqRJjhm .icon-shape .label rect,#mermaid-svg-gzJkXJI14IqRJjhm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gzJkXJI14IqRJjhm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gzJkXJI14IqRJjhm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gzJkXJI14IqRJjhm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 发送命令
2. 转发命令
3. 执行
4. 结果返回
5. 结果返回
6. 结果返回
adb client

命令行进程
adb server

后台进程,端口 5037
adbd

设备守护进程
shell 命令 / logcat

install / push / pull

server 的生命周期:

bash 复制代码
# 第一次敲 adb 命令时自动启动
adb start-server   # 手动启动
adb kill-server    # 手动杀掉

# server 常驻在电脑后台
# Windows: tasklist | findstr adb
# Mac/Linux: ps aux | grep adb

三、ADB 通信过程拆解

ADB 支持两种传输方式------USB 和网络:

传输方式 延迟 带宽 适用场景
USB 本地调试
TCP/IP(Wi-Fi) 较高 较低 无线调试、远程调试

USB 模式通信链路:

复制代码
adb client → TCP :5037 → adb server → USB Bulk Transfer → adbd

TCP/IP 模式通信链路:

复制代码
adb client → TCP :5037 → adb server → TCP :5555 → adbd

开启无线调试:

bash 复制代码
# 1. 先 USB 连上
adb tcpip 5555

# 2. 拔掉 USB,用 Wi-Fi 连
adb connect 192.168.1.100:5555

# 3. 确认连上了
adb devices
# 输出: 192.168.1.100:5555    device

# 4. 用完断开
adb disconnect 192.168.1.100:5555

四、设备连接相关命令

bash 复制代码
# 查看连接的设备
adb devices
# List of devices attached
# R5CTxxxxxxx    device           ← 正常
# R5CTxxxxxxx    unauthorized     ← 没授权(手机弹窗点确认)
# R5CTxxxxxxx    offline          ← adbd 没起来

# 指定设备(多设备连的时候必须用 -s)
adb -s R5CTxxxxxxx shell

# 重启到不同模式
adb reboot bootloader     # Fastboot
adb reboot recovery       # Recovery

# 查看 adb 版本
adb version

五、应用管理命令

安装和卸载:

bash 复制代码
# 安装
adb install app.apk                # 普通安装
adb install -r app.apk             # 覆盖安装(保留数据)
adb install -t app.apk             # 允许 testOnly 包
adb install -d app.apk             # 降级安装
adb install -g app.apk             # 安装时自动授权所有权限

# 批量安装(split APK)
adb install-multiple base.apk split_config.armeabi_v7a.apk

# 卸载
adb uninstall com.example.app      # 卸载
adb uninstall -k com.example.app   # 保留数据卸载

查询应用信息:

bash 复制代码
# 列出已安装的包名
adb shell pm list packages              # 所有
adb shell pm list packages | grep mi    # 搜小米的
adb shell pm list packages -3           # 只看第三方
adb shell pm list packages -s           # 只看系统
adb shell pm list packages -d           # 只看被禁用的

# 查 APK 安装路径
adb shell pm path com.example.app
# package:/data/app/com.example.app-xxxxx/base.apk

# 查 App 详细信息
adb shell dumpsys package com.example.app

启动和停止:

bash 复制代码
# 启动 Activity
adb shell am start -n com.example.app/.MainActivity
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com

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

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

# 强杀 App
adb shell am force-stop com.example.app

# 清除数据
adb shell pm clear com.example.app

权限管理:

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

# 收回
adb shell pm revoke com.example.app android.permission.CAMERA

# 看权限状态
adb shell dumpsys package com.example.app | grep permission

六、日志抓取命令

logcat 常用参数:

bash 复制代码
# 基本用法
adb logcat                       # 实时输出
adb logcat -c                    # 清空缓冲区
adb logcat -d                    # dump 当前缓冲区然后退出

# 按级别过滤
adb logcat *:W                    # Warning 及以上(W/E/F)
adb logcat *:E                    # 只看 Error
adb logcat AndroidRuntime:E *:S   # 只看 AndroidRuntime 的 Error

# 按 tag 过滤
adb logcat -s ActivityManager     # 只看 AMS 的日志
adb logcat -s MyTag MyTag2        # 多个 tag

# 输出格式
adb logcat -v time                # 带时间
adb logcat -v threadtime          # 带时间+线程(推荐)
adb logcat -v brief               # 简洁格式

# 保存到文件
adb logcat -d > log.txt
adb logcat -f /sdcard/log.txt     # 存到手机

多个 log buffer:

bash 复制代码
# Android 有四个 log buffer
adb logcat -b main                # 应用日志(默认)
adb logcat -b system              # 系统日志
adb logcat -b events              # 事件日志(am_activity_launch_time 等)
adb logcat -b crash               # 崩溃日志

# 四个 buffer 一起抓
adb logcat -b main -b system -b events -b crash -v threadtime > full.log

按进程过滤:

bash 复制代码
# 拿到 PID 再过滤
adb shell pidof com.example.app
adb logcat --pid=12345

七、文件与系统操作命令

文件传输:

bash 复制代码
# 推/拉文件
adb push local_file /sdcard/
adb pull /sdcard/remote_file ./
adb pull /sdcard/DCIM ./           # 拉整个目录

shell 里常用:

bash 复制代码
adb shell ls -la /sdcard/
adb shell cat /proc/cpuinfo
adb shell df -h                    # 磁盘空间
adb shell free -m                  # 内存
adb shell top -n 1                 # CPU 占用
adb shell ps -A                    # 所有进程
adb shell ps -A | grep system_server  # 看系统进程

截图和录屏:

bash 复制代码
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png

adb shell screenrecord /sdcard/demo.mp4     # Ctrl+C 停止
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4

系统属性和设置:

bash 复制代码
# 读属性
adb shell getprop ro.build.version.sdk
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release

# Settings
adb shell settings get global airplane_mode_on
adb shell settings put global airplane_mode_on 1
adb shell settings list global
adb shell settings list system
adb shell settings list secure

八、调试与状态查看命令

dumpsys------万能诊断工具:

bash 复制代码
# 列出所有可 dump 的服务
adb shell dumpsys -l

# 常用 dump
adb shell dumpsys activity activities         # Activity 栈
adb shell dumpsys activity processes          # 进程信息
adb shell dumpsys window windows              # 窗口状态
adb shell dumpsys meminfo                    # 内存总览
adb shell dumpsys meminfo com.example.app    # 某 App 内存
adb shell dumpsys battery                    # 电池状态
adb shell dumpsys wifi                       # Wi-Fi 信息
adb shell dumpsys alarm                      # Alarm 信息
adb shell dumpsys gfxinfo com.example.app    # 渲染性能
adb shell dumpsys input                      # 输入设备

meminfo 关键字段解读:

复制代码
adb shell dumpsys meminfo com.example.app

PSS Total      实际占用物理内存(含按比例分摊的共享库)
Private Dirty   进程独占脏页------真正的私有内存
Private Clean   进程独占干净页(可被系统回收)
Heap Size       Java 堆总大小
Heap Alloc      Java 堆已分配大小

查看当前前台 Activity:

bash 复制代码
adb shell dumpsys activity activities | grep "mResumedActivity"
# mResumedActivity: ActivityRecord{xxx com.example.app/.MainActivity}

九、实战:问题定位命令组合拳

场景一:App 崩溃了,抓现场

bash 复制代码
# 1. dump 崩溃日志
adb logcat -b crash -d
adb logcat -d | grep -A 30 "FATAL"
adb logcat -d | grep -A 30 "AndroidRuntime"

# 2. 记下崩溃前的 events
adb logcat -b events -d | tail -100

# 3. 抓 ANR trace
adb pull /data/anr/

# 4. 记崩溃时的内存
adb shell dumpsys meminfo <package>

场景二:测冷启动耗时

bash 复制代码
# 1. 杀掉 App
adb shell am force-stop com.example.app

# 2. 测速
adb shell am start -W com.example.app/.MainActivity
# 输出:
# ThisTime: 452    ← 最后一个 Activity 的启动耗时
# TotalTime: 786   ← 从 AMS 收到请求到完成
# WaitTime: 824    ← 最接近用户体感

# 3. 同时看 events log
adb logcat -b events -d | grep am_activity_launch_time

场景三:怀疑内存泄漏

bash 复制代码
# 连续 dump,看 PSS 增长趋势
adb shell dumpsys meminfo com.example.app | grep "TOTAL PSS"
sleep 10
adb shell dumpsys meminfo com.example.app | grep "TOTAL PSS"

# 抓 heap dump
adb shell am dumpheap com.example.app /sdcard/heap.hprof
adb pull /sdcard/heap.hprof
# 用 MAT 或 Android Studio Profiler 分析

场景四:抓全量现场

bash 复制代码
# bugreport 包含所有 dumpsys + logcat + ANR trace + 系统属性
adb bugreport bugreport.zip

十、实战:ADB 断连问题排查

#mermaid-svg-v943xlj797hKV4KY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-v943xlj797hKV4KY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-v943xlj797hKV4KY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-v943xlj797hKV4KY .error-icon{fill:#552222;}#mermaid-svg-v943xlj797hKV4KY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v943xlj797hKV4KY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-v943xlj797hKV4KY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v943xlj797hKV4KY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v943xlj797hKV4KY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-v943xlj797hKV4KY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v943xlj797hKV4KY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v943xlj797hKV4KY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v943xlj797hKV4KY .marker.cross{stroke:#333333;}#mermaid-svg-v943xlj797hKV4KY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v943xlj797hKV4KY p{margin:0;}#mermaid-svg-v943xlj797hKV4KY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-v943xlj797hKV4KY .cluster-label text{fill:#333;}#mermaid-svg-v943xlj797hKV4KY .cluster-label span{color:#333;}#mermaid-svg-v943xlj797hKV4KY .cluster-label span p{background-color:transparent;}#mermaid-svg-v943xlj797hKV4KY .label text,#mermaid-svg-v943xlj797hKV4KY span{fill:#333;color:#333;}#mermaid-svg-v943xlj797hKV4KY .node rect,#mermaid-svg-v943xlj797hKV4KY .node circle,#mermaid-svg-v943xlj797hKV4KY .node ellipse,#mermaid-svg-v943xlj797hKV4KY .node polygon,#mermaid-svg-v943xlj797hKV4KY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v943xlj797hKV4KY .rough-node .label text,#mermaid-svg-v943xlj797hKV4KY .node .label text,#mermaid-svg-v943xlj797hKV4KY .image-shape .label,#mermaid-svg-v943xlj797hKV4KY .icon-shape .label{text-anchor:middle;}#mermaid-svg-v943xlj797hKV4KY .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-v943xlj797hKV4KY .rough-node .label,#mermaid-svg-v943xlj797hKV4KY .node .label,#mermaid-svg-v943xlj797hKV4KY .image-shape .label,#mermaid-svg-v943xlj797hKV4KY .icon-shape .label{text-align:center;}#mermaid-svg-v943xlj797hKV4KY .node.clickable{cursor:pointer;}#mermaid-svg-v943xlj797hKV4KY .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-v943xlj797hKV4KY .arrowheadPath{fill:#333333;}#mermaid-svg-v943xlj797hKV4KY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-v943xlj797hKV4KY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-v943xlj797hKV4KY .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v943xlj797hKV4KY .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-v943xlj797hKV4KY .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v943xlj797hKV4KY .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-v943xlj797hKV4KY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-v943xlj797hKV4KY .cluster text{fill:#333;}#mermaid-svg-v943xlj797hKV4KY .cluster span{color:#333;}#mermaid-svg-v943xlj797hKV4KY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-v943xlj797hKV4KY .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-v943xlj797hKV4KY rect.text{fill:none;stroke-width:0;}#mermaid-svg-v943xlj797hKV4KY .icon-shape,#mermaid-svg-v943xlj797hKV4KY .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v943xlj797hKV4KY .icon-shape p,#mermaid-svg-v943xlj797hKV4KY .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-v943xlj797hKV4KY .icon-shape .label rect,#mermaid-svg-v943xlj797hKV4KY .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v943xlj797hKV4KY .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-v943xlj797hKV4KY .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-v943xlj797hKV4KY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 好了
还是断
好了
还是断
好了
还是断
好了
还是断
ADB 频繁断连
换根 USB 线试试?
线的问题,换了就好
换个 USB 口?
口的问题,换机箱后面的口
关闭/重开 USB 调试?
重新授权解决
杀 server 重启?
server 状态乱了
考虑改用 adb over Wi-Fi

或检查 adbd 是否挂掉

bash 复制代码
# 快速重置 ADB 连接
adb kill-server && adb start-server && adb devices

# 强制切回 USB 模式
adb usb

# 如果 adbd 挂了
adb shell setprop sys.usb.config mtp,adb

十一、常见踩坑记录

坑 1:adb root 在 user 版本上报错

bash 复制代码
adb root
# adbd cannot run as root in production builds
# userdebug 或 eng 版本才能用,user 版本不支持

坑 2:adb installINSTALL_FAILED_TEST_ONLY

bash 复制代码
# 包里有 android:testOnly="true",用 -t 参数
adb install -t app.apk

坑 3:adb devices 显示 unauthorized

手机上的"允许 USB 调试"弹窗没点确认。解锁手机看一下,如果弹窗已经消失,重新插拔 USB 或者在手机上关掉 USB 调试再打开。

坑 4:多设备连着没指定 -s

bash 复制代码
# ❌ 多设备时不指定 -s 会报错
adb shell
# error: more than one device/emulator

# ✓ 指定设备
adb -s R5CTxxxxxxx shell

坑 5:logcat 缓冲区溢出,关键日志被冲掉了

bash 复制代码
# 加大缓冲区(需要 root)
adb logcat -G 16M

# 或者在关键操作前先清空
adb logcat -c
# 立即操作 → 然后立刻 dump
adb logcat -d > log.txt

坑 6:adb pull 大文件时超时失败

bash 复制代码
# adb pull 没有断点续传,大文件容易超时
# 折中方案:在手机端压缩再拉
adb shell tar -czf /sdcard/logs.tar.gz /sdcard/large_folder/
adb pull /sdcard/logs.tar.gz
# 或者多分几个小拉
adb pull /sdcard/large_folder/part1/ .
adb pull /sdcard/large_folder/part2/ .

十二、总结

ADB 的三层架构速记:
#mermaid-svg-uqJy2ZFIsK9JaRHS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-uqJy2ZFIsK9JaRHS .error-icon{fill:#552222;}#mermaid-svg-uqJy2ZFIsK9JaRHS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uqJy2ZFIsK9JaRHS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .marker.cross{stroke:#333333;}#mermaid-svg-uqJy2ZFIsK9JaRHS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uqJy2ZFIsK9JaRHS p{margin:0;}#mermaid-svg-uqJy2ZFIsK9JaRHS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster-label text{fill:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster-label span{color:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster-label span p{background-color:transparent;}#mermaid-svg-uqJy2ZFIsK9JaRHS .label text,#mermaid-svg-uqJy2ZFIsK9JaRHS span{fill:#333;color:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .node rect,#mermaid-svg-uqJy2ZFIsK9JaRHS .node circle,#mermaid-svg-uqJy2ZFIsK9JaRHS .node ellipse,#mermaid-svg-uqJy2ZFIsK9JaRHS .node polygon,#mermaid-svg-uqJy2ZFIsK9JaRHS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .rough-node .label text,#mermaid-svg-uqJy2ZFIsK9JaRHS .node .label text,#mermaid-svg-uqJy2ZFIsK9JaRHS .image-shape .label,#mermaid-svg-uqJy2ZFIsK9JaRHS .icon-shape .label{text-anchor:middle;}#mermaid-svg-uqJy2ZFIsK9JaRHS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .rough-node .label,#mermaid-svg-uqJy2ZFIsK9JaRHS .node .label,#mermaid-svg-uqJy2ZFIsK9JaRHS .image-shape .label,#mermaid-svg-uqJy2ZFIsK9JaRHS .icon-shape .label{text-align:center;}#mermaid-svg-uqJy2ZFIsK9JaRHS .node.clickable{cursor:pointer;}#mermaid-svg-uqJy2ZFIsK9JaRHS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .arrowheadPath{fill:#333333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uqJy2ZFIsK9JaRHS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-uqJy2ZFIsK9JaRHS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uqJy2ZFIsK9JaRHS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster text{fill:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS .cluster span{color:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uqJy2ZFIsK9JaRHS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-uqJy2ZFIsK9JaRHS rect.text{fill:none;stroke-width:0;}#mermaid-svg-uqJy2ZFIsK9JaRHS .icon-shape,#mermaid-svg-uqJy2ZFIsK9JaRHS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-uqJy2ZFIsK9JaRHS .icon-shape p,#mermaid-svg-uqJy2ZFIsK9JaRHS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-uqJy2ZFIsK9JaRHS .icon-shape .label rect,#mermaid-svg-uqJy2ZFIsK9JaRHS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-uqJy2ZFIsK9JaRHS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-uqJy2ZFIsK9JaRHS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-uqJy2ZFIsK9JaRHS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} client

敲命令
server

后台转发
adbd

执行命令

核心命令速查表:

你要做什么 命令
装 App adb install -r xxx.apk
卸载 App adb uninstall com.example.app
启 Activity adb shell am start -n x/.A
强杀 App adb shell am force-stop x
清数据 adb shell pm clear x
看日志 adb logcat -v threadtime
看内存 adb shell dumpsys meminfo x
看前台 `adb shell dumpsys activity activities
传文件 adb push/pull
截图 adb shell screencap + pull
抓全量 adb bugreport bugreport.zip
无线调试 adb tcpip 5555 + adb connect IP

一句话: ADB 就是 client-server-daemon 三层结构,你敲的命令通过 server 转发给手机上的 adbd 执行。dumpsys、logcat、am、pm 四个命令配上 grep,能覆盖 90% 的日常调试场景。

相关推荐
Kapaseker1 小时前
五分钟搞定 Compose 用户名密码自动填充
android·kotlin
EasyCVR1 小时前
监控“孤岛”困局:国标GB28181视频监控平台EasyCVR一站式视频融合平台实现视频系统统一管理
android·音视频
眸生1 小时前
基于NeteaseCloudMusicApi的音乐app 支持 DeepSeek 自然语言找歌、批量导入歌单、下载音乐转换成MP3,下载歌词
android·python·kotlin·android studio·音频·fastapi·android jetpack
问心无愧05131 小时前
ctf show web入门68,69
android·前端·笔记
码上有光2 小时前
c++: 继承(下)
android·java·c++·多继承·菱形继承·虚继承
AI玫瑰助手2 小时前
Python函数:可变参数(星号args与双星号kwargs)详解
android·开发语言·python
_李小白13 小时前
【android opencv学习笔记】Day 28: 滤波算法之中值滤波器
android·opencv·学习
代龙涛15 小时前
WordPress page.php 页面模板与自定义模板使用方法
android·开发语言·php
爱莉希雅&&&16 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控