当前位置: 首页 > news >正文

Android ADB常用命令

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

目录

  • 一、ADB 到底是什么
  • 二、ADB 的三层 C/S/D 架构
  • 三、ADB 通信过程拆解
  • 四、设备连接相关命令
  • 五、应用管理命令
  • 六、日志抓取命令
  • 七、文件与系统操作命令
  • 八、调试与状态查看命令
  • 九、实战:问题定位命令组合拳
  • 十、实战:ADB 断连问题排查
  • 十一、常见踩坑记录
  • 十二、总结

一、ADB 到底是什么

ADB 全称 Android Debug Bridge,本质上是一个调试桥梁——连接你的电脑和 Android 设备。它由三个组件构成:

手机端

电脑端

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 架构

1. 发送命令

2. 转发命令

3. 执行

4. 结果返回

5. 结果返回

6. 结果返回

adb client
命令行进程

adb server
后台进程,端口 5037

adbd
设备守护进程

shell 命令 / logcat
install / push / pull

server 的生命周期:

# 第一次敲 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

开启无线调试:

# 1. 先 USB 连上adb tcpip5555# 2. 拔掉 USB,用 Wi-Fi 连adb connect192.168.1.100:5555# 3. 确认连上了adb devices# 输出: 192.168.1.100:5555 device# 4. 用完断开adb disconnect192.168.1.100:5555

四、设备连接相关命令

# 查看连接的设备adb devices# List of devices attached# R5CTxxxxxxx device ← 正常# R5CTxxxxxxx unauthorized ← 没授权(手机弹窗点确认)# R5CTxxxxxxx offline ← adbd 没起来# 指定设备(多设备连的时候必须用 -s)adb-sR5CTxxxxxxx shell# 重启到不同模式adbrebootbootloader# Fastbootadbrebootrecovery# Recovery# 查看 adb 版本adb version

五、应用管理命令

安装和卸载:

# 安装adbinstallapp.apk# 普通安装adbinstall-rapp.apk# 覆盖安装(保留数据)adbinstall-tapp.apk# 允许 testOnly 包adbinstall-dapp.apk# 降级安装adbinstall-gapp.apk# 安装时自动授权所有权限# 批量安装(split APK)adb install-multiple base.apk split_config.armeabi_v7a.apk# 卸载adb uninstall com.example.app# 卸载adb uninstall-kcom.example.app# 保留数据卸载

查询应用信息:

# 列出已安装的包名adb shell pm list packages# 所有adb shell pm list packages|grepmi# 搜小米的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

启动和停止:

# 启动 Activityadb shell am start-ncom.example.app/.MainActivity adb shell am start-aandroid.intent.action.VIEW-dhttps://www.baidu.com# 启动 Serviceadb shell am startservice-ncom.example.app/.MyService# 发广播adb shell am broadcast-aandroid.intent.action.BOOT_COMPLETED# 强杀 Appadb shell am force-stop com.example.app# 清除数据adb shell pmclearcom.example.app

权限管理:

# 授权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|greppermission

六、日志抓取命令

logcat 常用参数:

# 基本用法adb logcat# 实时输出adb logcat-c# 清空缓冲区adb logcat-d# dump 当前缓冲区然后退出# 按级别过滤adb logcat *:W# Warning 及以上(W/E/F)adb logcat *:E# 只看 Erroradb logcat AndroidRuntime:E *:S# 只看 AndroidRuntime 的 Error# 按 tag 过滤adb logcat-sActivityManager# 只看 AMS 的日志adb logcat-sMyTag MyTag2# 多个 tag# 输出格式adb logcat-vtime# 带时间adb logcat-vthreadtime# 带时间+线程(推荐)adb logcat-vbrief# 简洁格式# 保存到文件adb logcat-d>log.txt adb logcat-f/sdcard/log.txt# 存到手机

多个 log buffer:

# Android 有四个 log bufferadb logcat-bmain# 应用日志(默认)adb logcat-bsystem# 系统日志adb logcat-bevents# 事件日志(am_activity_launch_time 等)adb logcat-bcrash# 崩溃日志# 四个 buffer 一起抓adb logcat-bmain-bsystem-bevents-bcrash-vthreadtime>full.log

按进程过滤:

# 拿到 PID 再过滤adb shell pidof com.example.app adb logcat--pid=12345

七、文件与系统操作命令

文件传输:

# 推/拉文件adb push local_file /sdcard/ adb pull /sdcard/remote_file ./ adb pull /sdcard/DCIM ./# 拉整个目录

shell 里常用:

adb shellls-la/sdcard/ adb shellcat/proc/cpuinfo adb shelldf-h# 磁盘空间adb shellfree-m# 内存adb shelltop-n1# CPU 占用adb shellps-A# 所有进程adb shellps-A|grepsystem_server# 看系统进程

截图和录屏:

adb shell screencap /sdcard/screen.png adb pull /sdcard/screen.png adb shell screenrecord /sdcard/demo.mp4# Ctrl+C 停止adb shell screenrecord --time-limit10/sdcard/demo.mp4

系统属性和设置:

# 读属性adb shell getprop ro.build.version.sdk adb shell getprop ro.product.model adb shell getprop ro.build.version.release# Settingsadb shell settings get global airplane_mode_on adb shell settings put global airplane_mode_on1adb shell settings list global adb shell settings list system adb shell settings list secure

八、调试与状态查看命令

dumpsys——万能诊断工具:

# 列出所有可 dump 的服务adb shell dumpsys-l# 常用 dumpadb 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:

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

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

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

# 1. dump 崩溃日志adb logcat-bcrash-dadb logcat-d|grep-A30"FATAL"adb logcat-d|grep-A30"AndroidRuntime"# 2. 记下崩溃前的 eventsadb logcat-bevents-d|tail-100# 3. 抓 ANR traceadb pull /data/anr/# 4. 记崩溃时的内存adb shell dumpsys meminfo<package>

场景二:测冷启动耗时

# 1. 杀掉 Appadb shell am force-stop com.example.app# 2. 测速adb shell am start-Wcom.example.app/.MainActivity# 输出:# ThisTime: 452 ← 最后一个 Activity 的启动耗时# TotalTime: 786 ← 从 AMS 收到请求到完成# WaitTime: 824 ← 最接近用户体感# 3. 同时看 events logadb logcat-bevents-d|grepam_activity_launch_time

场景三:怀疑内存泄漏

# 连续 dump,看 PSS 增长趋势adb shell dumpsys meminfo com.example.app|grep"TOTAL PSS"sleep10adb shell dumpsys meminfo com.example.app|grep"TOTAL PSS"# 抓 heap dumpadb shell am dumpheap com.example.app /sdcard/heap.hprof adb pull /sdcard/heap.hprof# 用 MAT 或 Android Studio Profiler 分析

场景四:抓全量现场

# bugreport 包含所有 dumpsys + logcat + ANR trace + 系统属性adb bugreport bugreport.zip

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

好了

还是断

好了

还是断

好了

还是断

好了

还是断

ADB 频繁断连

换根 USB 线试试?

线的问题,换了就好

换个 USB 口?

口的问题,换机箱后面的口

关闭/重开 USB 调试?

重新授权解决

杀 server 重启?

server 状态乱了

考虑改用 adb over Wi-Fi
或检查 adbd 是否挂掉

# 快速重置 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 版本上报错

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

坑 2:adb installINSTALL_FAILED_TEST_ONLY

# 包里有 android:testOnly="true",用 -t 参数adbinstall-tapp.apk

坑 3:adb devices显示 unauthorized

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

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

# ❌ 多设备时不指定 -s 会报错adb shell# error: more than one device/emulator# ✓ 指定设备adb-sR5CTxxxxxxx shell

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

# 加大缓冲区(需要 root)adb logcat-G16M# 或者在关键操作前先清空adb logcat-c# 立即操作 → 然后立刻 dumpadb logcat-d>log.txt

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

# adb pull 没有断点续传,大文件容易超时# 折中方案:在手机端压缩再拉adb shelltar-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 的三层架构速记:

client
敲命令

server
后台转发

adbd
执行命令

核心命令速查表:

你要做什么命令
装 Appadb install -r xxx.apk
卸载 Appadb uninstall com.example.app
启 Activityadb shell am start -n x/.A
强杀 Appadb shell am force-stop x
清数据adb shell pm clear x
看日志adb logcat -v threadtime
看内存adb shell dumpsys meminfo x
看前台adb shell dumpsys activity activities | grep mResumedActivity
传文件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% 的日常调试场景。

http://www.jsqmd.com/news/934467/

相关文章:

  • 小米手表表盘设计终极指南:用Mi-Create轻松打造个性表盘
  • 告别打包噩梦:用虚拟环境+PyInstaller Hook文件,一劳永逸解决Paddle依赖丢失问题
  • 2026年益阳市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 2026年四平市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • OPNET卫星网络仿真中,Dijkstra路由算法到底该怎么配?一个实例讲透
  • 2026年温州市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 手把手教你用STM32F103C8T6打造百元级智能手表(含气压温湿度检测与游戏源码)
  • 2026年松原市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 2026年银川市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 从Excel到MATLAB:手把手教你用清风老师的数据,5分钟搞定所有回归误差计算
  • 2026年乌海市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 海康工业相机SDK在Linux下的两种安装方式:deb包 vs 源码编译,我为什么推荐前者?
  • SAP HCM员工主数据同步供应商BP时,如何搞定那个烦人的‘贸易伙伴’字段?
  • 告别手动计算!用Arcmap栅格计算器5分钟搞定MK-sen与Hurst结果的趋势叠加分析
  • 别急着降级NumPy!一招修改源码,永久解决‘np.complex’报错(附详细定位方法)
  • 校园互助微信小程序源码(云开发版):含前后端代码、数据库脚本与完整部署说明
  • 2026年乌兰察布市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • STM32CubeIDE工程复制后,.ioc文件打不开?教你两步修复并彻底清理旧Debug文件
  • 2026年聊城市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 别再被`Uint8Array`坑了!Vue3 + WebSocket + protobufjs 实战避坑全记录
  • 别再乱用flatten了!PyTorch中Tensor展平的三种结果(视图or副本)保姆级解析
  • ThingsBoard网关实战:如何把车间里的Modbus老设备轻松接入物联网平台?
  • 2026年永州市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 2026年苏州市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 用STM32CubeMX给TFT-LCD屏做个‘触控校准数据掉电保存’功能(AT24C02实战)
  • AI会议秘书实战:从语音识别到智能纪要的核心技术与架构
  • 2026年宿迁市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 2026年乌鲁木齐市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 2026年玉溪市黄金回收白银回收铂金回收靠谱门店TOP5排行榜+联系方式电话 - 大熊猫898989
  • 告别yum install sysbench:手把手教你从源码编译安装sysbench-1.20(支持MySQL/PostgreSQL)