尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ADB命令全攻略:从环境搭建到高频实战与排错

发布时间:2026/9/26 21:06:42

资讯中心
01
ARTICLE

ADB命令全攻略:从环境搭建到高频实战与排错

ADB命令全攻略:从环境搭建到高频实战与排错
我第一次接触ADB还是安卓4.4流行的年代那时候拿着一条数据线在电脑前折腾了半天就为了让手机屏幕上出现允许USB调试的弹窗。当时我根本不知道这个叫Android Debug Bridge安卓调试桥的命令行工具会成为后面十年里我每天都要用的东西。ADB说白了就是电脑和安卓设备之间的一座桥装上它之后你可以在电脑上指挥手机安装应用、拷贝文件、抓日志、模拟点击甚至批量控制几十台设备做自动化测试。无论你是安卓开发、测试工程师、玩机爱好者还是刚入行的运维这套命令都值得系统过一遍。这篇文章不存在什么高深理论全部是我这些年实际敲过的命令和踩过的坑。我会从环境搭建讲到高频命令再到报错排查尽量把每一步为什么这么做讲清楚而不是丢给你一份命令列表就完事。1. 先搞清楚ADB的工作原理后面排错才不慌很多人一上来就背命令遇到问题就懵了其实ADB的架构非常简单搞懂了之后几乎所有报错你都能自己判断方向。ADB由三个部分组成电脑上运行的客户端就是你敲adb命令的那个进程、电脑后台运行的server服务端负责管理所有ADB连接监听本机5037端口以及手机里的adbd守护进程真正的执行端。你在电脑上敲一条adb命令客户端先把指令发给本机的serverserver再通过USB线或Wi-Fi通道把指令转发给手机里的adbd去执行最后把结果一层层传回来。这个三层设计是有道理的。server进程可以在电脑后台统一管理多台设备所以你在电脑上连接多台手机时不需要为每台设备单独开一套服务它们共享同一个5037端口通道。而且ADB把USB抽象成了网络通信一样的Socket通道这意味着无线调试在架构上天然就是支持的老功能只是以前需要手动开启Android 11之后才把它做成了标准的配对流程。理解了这一点很多问题就迎刃而解了。比如你在电脑上启动了某个安卓模拟器它内部自带一套旧版ADB你同时又装了最新的platform-tools两个版本的server就会在5037端口上打架报出adb server version doesnt match this client这种经典错误。这种情况不是你手机有问题而是电脑上存在多条桥互相干扰了。后面我会专门讲这一类冲突怎么处理。2. 环境准备从零装好ADB并跑通第一条命令2.1 三种主流平台安装方式ADB的官方获取渠道其实只有一个就是谷歌的SDK Platform-Tools。网上流传的各种ADB工具包1.0.32绿色版一键安装包我劝你直接绕开那些老版本工具包恰恰是版本冲突的罪魁祸首而且来源不明的内容也存在安全隐患。Windows上最靠谱的做法是去Android开发者官网下载platform-tools压缩包解压后你会看到adb.exe、fastboot.exe、AdbWinApi.dll这些文件。把整个文件夹放到一个固定位置比如C盘根目录下的platform-tools然后把路径配到系统环境变量里后面我会细说。macOS用户就省事多了装了Homebrew的话直接一行命令brew install android-platform-tools。Linux阵营比较分散Debian和Ubuntu系可以用apt安装apt install android-tools-adb android-tools-fastboot。RHEL和Fedora系用dnf install android-tools。如果你用的是Archpacman -S android-tools就好。装完统一验证一下adb version。能看到版本号就说明程序本身没问题。Windows用户如果在CMD里敲adbreport不是内部或外部命令那百分百是环境变量没配好跟工具本身没关系。2.2 手机端需要打开的两个开关电脑装好了还不行手机也得放行。安卓手机默认藏起了开发者选项你需要进入关于手机连续点击版本号七次左右系统提示您已进入开发者模式才算成功。不同厂商入口略有差异小米在我的设备里华为在关于手机里但逻辑都一样。然后你在开发者选项里打开USB调试部分国产ROM还藏了一个USB安装开关尤其是小米、华为这些默认会拦截通过ADB安装的应用不打开的话后面install命令会报INSTALL_FAILED_USER_RESTRICTED。数据线连上电脑后手机一般会弹出一个是否允许USB调试的授权框勾选始终允许点确定。如果这个弹窗一直不出现检查手机通知栏里有没有USB连接方式要切换到传输文件或PTP模式纯充电模式下有些机型不开启调试通道。Windows还有一个特有的坑就是驱动。正常情况下Win10和Win11能自动识别安卓设备的ADB接口但某些老设备或精简版系统会识别成Android Composite ADB Interface并打上感叹号。解决办法就是去装OEM USB驱动或者直接用驱动工具检测一下这种情况在国产山寨机上见得比较多。2.3 环境变量配置方法配置环境变量的意义在于你可以在任意目录下直接敲adb命令不用每次都在platform-tools目录里执行。我见过不少新手卡在这一步明明工具能用换了个目录就找不到命令了。Windows的配置路径是此电脑右键-属性-高级系统设置-环境变量找到Path这一项点编辑新建一行填上你解压platform-tools的完整路径比如D:\platform-tools。然后新开一个CMD窗口敲adb version验证一下。macOS和Linux用户如果你通过brew或apt安装的路径一般已经自动加好了不需要手动改。如果你是自己下载的包那么在.bashrc或.zshrc里加一行export PATH$PATH:/你的路径/platform-tools然后source一下。注意改完环境变量之后一定要新开终端窗口再验证别在旧窗口里反复试那个窗口不会加载新的PATH。3. 设备连接有线、无线两套方案都得掌握3.1 adb devices和经典的unauthorized问题连上设备后第一件事永远是看一眼设备是否被识别adb devices。如果是一切正常的画面输出列表里会有一个device状态List of devices attached XXXXXXXX device这个状态才是真正的通了。如果你看到的不是device而是unauthorized说明手机端没有授权或授权被误点了。解决办法很直接手机重新拔插数据线锁屏后再解锁看弹窗有没有出现有就重新点允许如果弹窗一直不出现可以去开发者选项里找到撤销USB调试授权然后重新插拔一遍。unauthorized是新手遇到最多的状态基本上九成是授权弹窗被忽略了。别急着重启电脑那不是问题所在。还有一个常见状态是offline意思是设备发了包但server读不到完整握手信息。这通常有三个方向换一根数据线很多线只有充电没有数据手机上把USB调试开关关掉再打开一次或者执行adb kill-server然后adb start-server重启服务端。这三个操作能解决八成offline问题。3.2 无线调试摆脱数据线的束缚调试最烦的就是那一根线尤其是你要拿着手机走动测试的时候。Android 11之前的传统无线方案是先用数据线连上电脑输入adb tcpip 5555然后拔掉线再输入adb connect 设备IP:5555前提是手机和电脑在同一个Wi-Fi网段。这个IP可以在手机Wi-Fi设置里查到或者在命令行用adb shell ip addr show wlan0查看。Android 11之后谷歌做了标准的无线调试功能不再依赖tcpip端口。手机开发者选项里打开无线调试它会显示一个IP和端口还有一个六位配对码。电脑上先执行adb pair IP:配对端口输入配对码完成配对然后adb connect IP:调试端口就连上了。这套流程更安全也省去了手动开5555端口的老操作。无线调试的实际体验取决于网络环境路由器配置差或者隔墙严重命令延迟会明显变高尤其是输入中文文本的时候卡顿非常明显。所以真机调试能插线就插线无线适合临时应急或者跑一些不频繁交互的monkey测试。注意adb tcpip命令开启的5555端口在设备重启后会失效需要重新配置。Android 11的无线调试配对信息通常也会在重启后清掉。4. 高频命令实战从安装应用到操作文件4.1 应用管理安装、卸载、启动一气呵成日常开发调试里最高频的操作就是装APK。基础命令是adb install 包名.apk但实际使用中一定要带参数-r 覆盖安装保留应用数据升级测试时用-d 允许低版本覆盖高版本回滚测试时用-g 安装时直接授予所有运行时权限自动化测试时省去手动点授权一条完整的常用命令长这样adb install -r -g app-debug.apk。对应的卸载命令是adb uninstall 包名。但有时候你想卸载但不想去翻包名可以直接adb uninstall后用pm list packages加grep过滤来查。查看所有已安装应用adb shell pm list packages配合管道和搜索词可以快速定位比如只看微信相关adb shell pm list packages | grep tencent。启动一个应用的指定界面是adb shell am start -n 包名/Activity名。Activity名对新手来说是个门槛有个取巧的办法先手动在手机上打开目标界面然后执行adb shell dumpsys window | grep mCurrentFocus输出里会带出当前窗口对应的包名和Activity名复制出来就能用。强制停止应用入口是adb shell am force-stop 包名这个命令在处理崩溃循环的应用时比手动划掉后台任务更彻底。4.2 文件传输与截图录屏把手机画面变成电脑文件电脑往手机拷文件用adb push 本地路径 手机路径手机往电脑拉文件用adb pull 手机路径 本地路径。这两个命令的路径都必须是绝对路径手机上就是/data/local/tmp或者/sdcard这种电脑上就是你的真实目录。想从手机往电脑保存截图很多人习惯先adb shell screencap -p /sdcard/screen.png再adb pull两步操作其实可以合成一步adb exec-out screencap -p screen.png。这里有个小坑如果你只写adb shell screencap -p screen.png而不加exec-out生成的图片会打不开因为shell通道会把换行符做转换导致文件头损坏。exec-out就是绕过这层处理的直通模式实测下来非常稳。录屏用adb shell screenrecord /sdcard/demo.mp4默认最多录3分钟录制过程中如果要提前结束按CtrlC。屏幕内容在录屏文件里会有一定压缩清晰度满足大部分演示需求。提取已安装应用的APK也是常用操作。先用adb shell pm path 包名会输出一个APK路径比如package:/data/app/xxx/base.apk然后adb pull /data/app/xxx/base.apk ./repacked.apk就能把安装包捞出来。4.3 锁屏与密码处理自动化测试必会的几招跑自动化脚本的时候最烦的就是设备锁屏。你可以用adb shell input keyevent 82来模拟菜单键唤醒屏幕但这种方法只解决亮屏不解锁密码。更彻底的做法是用adb shell locksettings set-disabled true直接把锁屏密码清掉这个命令在Android 7及以上设备中都能用执行之后系统锁屏界面会变成滑动解锁或无锁状态。这个命令在生产环境要慎用它本质上是在修改设备的安全策略测试机上随便用但如果你手上是用户日常在用的设备清掉锁屏密码可能会引起隐私风险操作前一定确认设备归属。另外个别定制ROM会拦这个命令提示操作失败那就只能去设置里手动关锁屏密码。还有一个小技巧有些测试场景需要屏幕常亮不锁屏adb shell svc power stayon true可以让设备在充电状态下保持唤醒跑长时间压测的时候非常实用。5. 日志排查logcat和dumpsys才是真正的调试点5.1 logcat抓日志的正确姿势安卓的日志系统叫Logcat这是所有开发者排查崩溃和异常的第一战场。最基础的用法是adb logcat但这条命令会持续刷新刷屏实用性有限。实际使用中要掌握几个核心参数ads logcat -c先清空历史日志然后复现你的操作再adb logcat -d crash.log把当前缓冲区内容一次性导出到文件。这个先清空、再复现、后导出的顺序是排错三板斧能保证你分析的文件里只包含和你操作相关的日志。按级别过滤是另一个关键技能。日志级别从低到高是V、D、I、W、E分别对应Verbose、Debug、Info、Warn、Error。一般排查崩溃只看Error级别就够了adb logcat *:E。想看某个具体标签的日志比如只看SSL相关adb logcat -s SSL。实际使用中往往需要组合adb logcat -c adb logcat -s AndroidRuntime:E -d crash.log这段命令先把日志清空然后只抓AndroidRuntime标签的错误并保存到文件。另一个实用的参数是-v time加上之后每条日志前面会带上精确到毫秒的时间戳adb logcat -v time -d log.txt。时间戳对排查性能问题非常关键能让你看清一段操作前后的耗时分布。5.2 dumpsys系统服务信息速查dumpsys是ADB里信息量最大的一个家族命令可以读取系统中所有系统服务的当前状态。常用的有这几个adb shell dumpsys activity activities可以查看当前Activity栈的情况调试页面跳转和任务栈问题时很管用。adb shell dumpsys meminfo 包名可以查看指定应用的内存占用明细有Java Heap、Native Heap、Code等各种分类排查内存泄漏时先用它拿到快照。adb shell dumpsys window | grep mCurrentFocus可以查看当前焦点窗口。还有一个特殊用法值得单独拎出来说adb shell dumpsys battery set usb 0。这条命令的作用是关掉USB充电模拟设备没有在充电的状态。做耗电测试和温度测试时这个命令非常有用因为连上电脑调试时数据线一直在给手机充电会让电池温度虚高测出来的耗电数据不可信。测完用adb shell dumpsys battery reset还原。5.3 bugreport全量诊断如果问题发生在真机上而且日志范围不明确最省事的办法是直接导出bugreport。adb bugreport会在当前目录生成一个zip压缩包里面包含logcat、dumpsys各个服务、内核日志、网络状态等所有能拿到的系统信息。这个包体积不小动辄几十MB但分析问题时的信息量是巨大的。bugreport适合用于那些比较难复现的系统级问题比如系统UI卡死、重启、某个系统进程崩溃。普通应用层的崩溃不需要走到这一步logcat就够了。6. UI自动化与辅助操作让手机自己动起来6.1 uiautomator dump获取界面结构很多人不知道ADB其实可以直接读取当前界面的UI元素层级。adb shell uiautomator dump会在设备上生成一个XML文件里面完整记录了当前屏幕上所有控件的坐标、文本、资源ID和类名。默认路径是/sdcard/window_dump.xml你可以用adb pull把它拉下来分析。这个功能对自动化测试来说意义重大。你可以用脚本读取XML找到目标控件的bounds属性拿到中心坐标然后用input tap命令精确点击。这样实现的自动化测试不依赖具体的自动化框架纯命令行就能跑通。我之前写过一个简单的压力测试脚本先dump界面再解析坐标然后通过input操作不需要在手机上安装任何测试框架就能模拟用户点击在兼容性测试时救过不少急。但uiautomator dump有几个硬伤屏幕上有正在播放的动画时经常dump失败报错could not get idle state需要辅助功能权限的页面也会出现无法获取节点的情况。解决思路是尽量在页面静止时执行dump必要的话先用input keyevent 3回到桌面再重新进入目标页面。6.2 input模拟点击与滑动纯命令行操作屏幕的核心是input命令adb shell input tap 540 960模拟点击坐标(540, 960)adb shell input swipe x1 y1 x2 y2 duration模拟从点1滑动到点2duration是滑动耗时毫秒数adb shell input text hello向焦点输入框输入文本注意只支持ASCII字符中文会乱码坐标怎么定最直接的办法是开手机的显示指针位置功能它就藏在开发者选项里打开之后你点屏幕就能在顶部看到实时坐标。对于带刘海屏和全面屏手势的设备坐标基准和实际的点击区域有偏差我习惯用uiautomator dump拿到的bounds来定位准确率高得多。input swipe在操作列表滚动时非常实用比如一个长列表adbshell input swipe 540 1800 540 400 300就能模拟一次快速上滑用于加载更多或翻页测试。7. 高频报错与排查策略我把这些年踩过的坑整理成速查表7.1 adb server version不匹配这是ADB用户最经典的报错原文长这样adb server version (31) doesnt match this client (41); killing...。出现这个报错的原因几乎都是电脑上存在多个版本的adb程序。举例来说你装了最新的Android Studio自带的platform-tools某个安卓模拟器又在自己的安装目录里塞了一份旧版adb工具包两个程序同时抢5037端口旧server启动之后新client发现server版本不匹配就直接把它杀掉重启反反复复。我的处理习惯是先执行adb kill-server然后检查系统PATH里到底用的是哪个adb。在CMD里敲where adb会列出所有被识别的adb路径。如果发现除了platform-tools之外还有别的来源要么把旧的删掉要么调整PATH顺序让官方platform-tools排在前面。解决之后adb start-server再试。这类问题的根源是网上各种工具包版本混乱所以我在前面就强调过直接用官方platform-tools别为了一时方便下载来路不明的旧工具包。版本一致能省掉大量莫名其妙的坑。7.2 5037端口占用每次启动连接如果报adb server failed或者提示could not read ok from ADB Server大概率就是5037端口被占用了。Windows下的排查命令是netstat -ano | findstr 5037输出里最后一列是占用进程的PID然后tasklist /FI PID eq 你的PID看看是哪个进程如果是无关程序直接用taskkill /PID 你的PID /F结束掉。macOS和Linux下用lsof -i :5037看占用情况。我还见过一个更隐蔽的场景某安全软件或手机助手也会启动自己的ADB服务它占用5037端口导致官方ADB完全连不上设备。遇到这种问题检查一下后台进程里的手机助手类程序退出它们之后再做端口检查。7.3 authorized和offline状态总结前面已经单独讲过这里我直接给速查表状态 | 含义 | 解决方向 unauthorized | 设备未授权 | 手机弹窗点允许撤销调试授权重来重启adb server offline | 握手异常 | 换线换口关闭再打开USB调试adb kill-server重启 no permissions | 用户无权限 | Linux下加sudo或配置udev规则 device not found | 完全没识别 | 检查驱动和USB模式换电脑验证这里特别说一下Linux下的no permissions问题。Linux的USB设备默认对普通用户没有读写权限你需要创建一个udev规则文件把手机的厂商ID放进去。一般来说装上android-tools-adb后会自动带一份基础的udev规则但有些发行版需要手动把当前用户加入plugdev组然后重新插拔设备。7.4 安装应用时的权限报错adb install如果报INSTALL_FAILED_USER_RESTRICTED通常不是APK本身的问题而是设备端的安装权限受限。国产ROM比较常见尤其是小米和华为开发者选项里有一个USB安装的开关默认关闭需要在登录账号的情况下打开。有些老款电视盒子、机顶盒也存在类似限制需要在工厂设置或开发者设置里找到ADB调试相关的开关。如果是adb uninstall报错先检查你是不是用了系统应用的包名系统应用不能用普通方式卸载。7.5 连接闪断和批处理优化设备连上了但过几分钟就掉线Windows下最常见的原因是USB节能策略。电源选项里的USB选择性暂停设置会把空闲的USB设备断掉对于长时间跑测试的场景影响很大。在电源选项里把它禁用或者用wmic命令设置USB电源管理可以解决掉线问题。日常高频操作建议做个别名或批处理。我在Windows上放了一个adb.bat脚本里面把常用命令都封装了一遍比如输入log就是清空并抓取新日志到文件shot就是截屏另存到当前目录。这些脚本虽然简单但每天能省下大量重复输入命令的时间。8. 几条实实在在的优化建议ADB本身只是个命令工具真正提升效率的是你怎么组合使用它。我自己的习惯是尽量把多个命令用连接成串避免逐步等待。比如杀掉应用后立刻重新启动并抓取启动日志adb shell am force-stop com.example.app adb logcat -c adb shell am start -n com.example.app/.MainActivity adb logcat *:E -d startup.log。这样一条命令就能输出应用冷启动阶段的所有错误日志。多设备场景一定要养成加-s参数的习惯比如adb -s 设备序列号 install app.apk不然同时插两台手机时命令会因为设备不明确而报错。想快速拿到所有设备序列号adb devices的输出里第一列就是。还有一点涉及安全的提醒别在生产环境乱执行pm disable系统应用。有些优化教程会让你用pm disable禁用各种系统组件表面上系统变快了但其实很多组件之间存在依赖关系禁用了会导致系统UI崩溃甚至无限重启。我之前就遇到过同事为了省电禁用了一个系统服务结果整机无法开机只能线刷教训非常深刻。在真机上折腾可以用但在重要设备上一定要三思而后行。最后再分享一个技巧当你不确定系统当前状态时先执行adb shell dumpsys把输出存到文件再慢慢翻不要直接在终端里找因为输出量巨大终端工具会卡死。我个人习惯是adb shell dumpsys dump.txt然后打开文件搜索关键词效率会高很多。这套ADB命令我用到现在最深的感受是它像一把万能钥匙只要设备能连上大部分问题都能找到对应的命令去定位。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。