
简介platform-tools.zip 是面向 Android 开发与调试人员的官方平台工具压缩包专门解决 adb 版本不匹配典型报错如 server version (31) doesn’t match this client (36)以及 no devices/emulators found 等设备连接问题。压缩包共包含 22 个文件核心是可执行的 adb.exe、fastboot.exe 等工具同时提供 AdbWinApi.dll、AdbWinUsbApi.dll 动态库保证 Windows 环境下的正常调用并附有 systrace.py 等 Python 脚本用于性能追踪以及少量 HTML/CSS/JS 辅助文档与配置文件整体仅 1.74MB部署非常轻量。该资源由作者 codehxy 上传目前已有 2599 人浏览学习是 Android 开发者维护调试环境的常用选择。下载后可直接替换或补充本地工具链快速消除版本冲突其中 fastboot、sqlite3、dmtracedump 等组件可进一步支持刷机、数据库查看、堆栈分析等任务适合遇到 adb 异常报错或需要搭建完整调试套件的初中级开发者。1. 从 platform-tools.zip 认识 adb 与 fastboot一个压缩包解决设备调试入口platform-tools.zip 这个名字做 Android 调试的人几乎都见过一个几十 MB 的压缩包解压后是 adb、fastboot 等命令行工具却能完成装包、抓日志、刷分区这些绕不开的操作。很多人第一次下载它是因为不想为一条 adb 命令装整套开发环境或者手头设备需要进 fastboot 刷机、救砖必须用到这几个程序。它的定位很纯粹不依赖集成开发环境解压即用适合 Android 应用开发、测试、ROM 维护、三方工具链集成以及终端维修场景。下面的内容按「装什么、怎么用、哪里翻车」的顺序展开新手能照着跑通熟手可以直接看参数和边界。2. 解压即用platform-tools.zip 的文件构成与最小可运行环境2.1 核心文件逐个看adb、fastboot、aapt2 的分工解压 platform-tools.zip 之后先把里面的文件认全。常见构成如下表文件/目录作用说明adb.exe / adb调试桥客户端与服务端装应用、拉日志、shell、传文件都走它fastboot.exe / fastboot刷机工具在 bootloader 模式写分区救砖和系统级写入靠它aapt2.exe / aapt2APK 信息解析安装前读包名、版本号、权限AdbWinApi.dll / AdbWinUsbApi.dlladb 在 Windows 下的运行库缺失会导致 adb 起不来不要单独删lib64/部分架构的动态库一般不用管source.properties / NOTICE.txt版本与许可信息排查工具版本时看这里表格里最需要理解的是前三个。adb 是三端结构你敲的命令是客户端电脑后台常驻的 adb server 负责转发手机里的 adbd 负责执行。server 默认监听本机 5037 端口所以当电脑上存在多个 adb 版本时谁先启动了 server谁就决定了后续的协议版本这也是第 5 章版本冲突的根源。fastboot 和 adb 走的是完全不同的通道。它在 bootloader 阶段工作此时设备系统还没起来因此可以写 boot、recovery、vbmeta 这类底层分区。日常调试用 adb 就够刷机、救砖必须在 fastboot 模式完成。两者的驱动接口也不一样这是后面「fastboot 认不到设备」的常见原因。aapt2 是 APK 解析器不依赖设备。用它可以在安装前确认包名、版本号避免装错包# 查看 APK 基本信息包名、版本号、权限 aapt2 dump badging app-release.apk | findstr package versionName # macOS/Linux 下把最后的 findstr 换成 grep说明输出里的 package 行是包名和版本号uses-permission 行是权限列表。三方渠道来的测试包经常出现包名对不上、版本高于线上包的情况先 dump badging 再决定装不装能省很多沟通成本。2.2 第一次跑通解压、配环境变量、验证最小命令Windows 上最常见的做法是把解压目录加进 PATH。很多人直接用setx PATH %PATH%;C:\platform-tools但 setx 有 1024 字符截断问题原 PATH 很长时会丢掉后半截导致其他命令失效。我习惯用 PowerShell 只改用户级 PATH# PowerShell把 platform-tools 追加到用户级 PATH避免 setx 截断 $tools C:\platform-tools $userPath [Environment]::GetEnvironmentVariable(Path, User) [Environment]::SetEnvironmentVariable(Path, $userPath;$tools, User) # 重开终端后验证 adb version adb devices -l这段只做追加不覆盖原变量持久化在注册表用户区不影响系统级 PATH。改完必须重开终端当前会话读不到新 PATH。不习惯命令行的在「系统属性 → 高级 → 环境变量」里编辑 Path 追加同一目录也一样。macOS/Linux 下命令名没有 .exe 后缀解压后如果提示权限不足先给执行权限再配置# macOS/Linux把解压目录加入 PATH 并写入 shell 配置 chmod x $HOME/platform-tools/adb $HOME/platform-tools/fastboot echo export PATH$HOME/platform-tools:$PATH ~/.zshrc source ~/.zshrc adb version用 bash 的话把 .zshrc 换成 .bashrc。不想改 PATH 也完全可以进到解压目录里执行.\adb或./adb一次性使用足够。2.3 设备端前置条件开发者选项与 USB 模式的组合工具就绪后设备端还要开两个开关。开发者选项默认隐藏在「设置 → 关于」里连点版本号 7 次左右就会出现。进去打开 USB 调试插线后通知栏会弹 USB 用途选择务必选「文件传输/MTP」。选「仅充电」时很多机型不会暴露 adbd 的调试接口电脑上看到的设备要么 offline要么干脆不出现。Windows 首次插线会自动装 ADB 接口驱动如果设备管理器里出现黄色感叹号需要装厂商提供的 USB 驱动。macOS 和 Linux 一般免驱但部分 Linux 发行版要配 udev 规则才能以普通用户访问 USB 设备否则会报 no permissions临时验证可以用 sudo长期使用建议写 udev 规则。手机端弹「允许 USB 调试吗」时要勾选「始终允许」并确认此时手机处于亮屏解锁状态。锁屏状态下不少机型不会弹窗这也是第 5 章 unauthorized 的常见诱因。3. adb 高频操作装包、传文件、抓日志的实战命令3.1 设备连接检查在线状态、序列号与异常输出环境跑通后的第一件事是确认设备在线adb devices -l # -l 会额外显示型号、传输通道标识多设备管理时很有用输出分两列第一列是序列号第二列是状态。状态为 device 才能执行操作emulator-5554 开头的是模拟器offline 或 unauthorized 分别对应第 5 章的 5.1 和 5.2。多设备同时连接时任何命令都要用-s 序列号指定目标否则 adb 会拒绝执行并提示 multiple devices。连接异常时先做低成本的重置动作不动设备数据adb kill-server adb start-server这两条只是重启电脑端的调试服务。连接状态奇怪时先跑一遍很多偶发问题到这里就结束了。3.2 安装、卸载与覆盖安装的参数选择装包是最高频的操作参数选不对会直接报错adb install -r -d app-debug.apk # 覆盖安装并允许降级 adb install -r -t app-test.apk # 覆盖安装允许 testOnly 标记 adb install-multiple base.apk split1.apk split2.apk # 分片安装 adb uninstall com.example.app # 卸载 adb push ./app-debug.apk /sdcard/Download/ adb pull /sdcard/Download/log.txt ./backup/常用参数的作用如下参数作用典型场景-r覆盖安装升级调试包-d允许版本降级从测试版回退旧版-t允许安装 testOnly 的 APK跑自动化测试包-g安装后授予所有运行时权限免手动点权限弹窗-s将应用装入 SD 卡老设备新设备基本用不上adb install-multiple用于 split APK 场景一个 base 包加若干 split 包必须一起装单独 install 会失败。push/pull 没有确认提示pull 时同名文件会直接覆盖批量导出前先在目标目录看一眼。遇到 INSTALL_FAILED_UPDATE_INCOMPATIBLE通常是已安装版本签名不一致此时 -r 无效只能先卸载再装遇到 INSTALL_FAILED_TEST_ONLY是缺了 -t 参数。3.3 logcat 抓日志按进程过滤与崩溃缓冲区抓日志最常踩的坑是日志量太大刷屏所以过滤参数要熟练adb logcat -v threadtime -s MyTag:V *:S # 只看 MyTag忽略其余输出 adb logcat -v threadtime --pid 12345 # 按进程过滤pid 用 pidof 拿 adb logcat -b crash # 只看崩溃缓冲区 adb logcat -c # 清空日志后重新抓-v threadtime会带进程号、线程名和时间戳定位并发问题时比默认的 brief 格式清晰得多。-s MyTag:V *:S的含义是只放行 MyTag 的任意级别其余全部静默。--pid适合只想看自己应用的场景pid 可以用adb shell pidof -s 包名拿到。-b crash在不少机型上比全量抓取再 grep 更容易命中崩溃现场。-c清空后立刻复现问题拿到的就是从崩溃前到崩溃后的完整链路。Windows 下想要文本过滤直接重定向到文件再搜索adb logcat -v threadtime app.log # 日志量大时终端会丢帧落盘最稳3.4 截屏、录屏与 dumpsys 快速定位定位 UI 问题时截图和录屏比口头描述可靠adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png ./ adb shell screenrecord --bit-rate 4000000 --time-limit 10 /sdcard/demo.mp4 adb shell dumpsys activity activities | findstr mResumedActivity adb shell getprop ro.product.model adb shell dumpsys meminfo com.example.appscreencap 的-p表示输出 png 格式有些设备不加会得到裸 RGB 数据。screenrecord 默认码率高达 20Mbps录出来文件巨大压到 4Mbps 足够看清操作路径time-limit 上限 180 秒。dumpsys activity 看当前前台 Activitygetprop 查型号和系统版本meminfo 看内存占用排查内存泄漏时配合多次采样对比。4. fastboot 刷机与分区写入从解锁到刷入的完整边界4.1 fastboot 模式进入方式与设备识别adb 管的是系统里的应用和数据fastboot 管的才是系统本身。进入方式最可靠的是命令触发adb reboot bootloader fastboot devices fastboot getvar all按键组合进 bootloader 因厂商而异等设备停留在 bootloader 界面后fastboot devices会输出序列号和 fastboot 状态。fastboot getvar all返回 product、security state、current-slot 等关键变量刷机前先读一遍相当于把设备底细摸清。Linux 部分发行版 fastboot 需要 root 或 udev 规则表现为一直 waiting for device。4.2 解锁、分区写入与临时引导的操作fastboot 的核心操作围绕分区读写常用命令如下fastboot flashing unlock # 解锁 bootloader会清空数据 fastboot --slot all flash boot boot.img fastboot flash recovery recovery.img fastboot flash vbmeta vbmeta.img # 动 vbmeta 要格外谨慎 fastboot boot boot.img # 临时引导不写入分区 fastboot set_active a # 切换 A/B 槽位 fastboot reboot提示解锁 bootloader 会清除设备全部数据且部分厂商设备解锁后系统更新链路会变化。操作前必须备份并确认这样做是自己能承担后果的。--slot all只对 A/B 分区设备有意义双槽同时写入可以避免另一槽版本不匹配只有单槽设备时该参数会直接报错。fastboot boot是刷机前的后悔药先把镜像临时引导起来验证一次确认没问题再 flash 写入能避免把坏镜像固化到分区里。厂商对 vbmeta 的校验很严格乱刷会导致开机进 warning 或反复重启遇到验证失败先想清楚是否真的需要动它。4.3 版本匹配与刷机失败时的检查顺序fastboot 的报错普遍简短但每条信息都很具体。高频报错整理如下fastboot 报错常见原因处理建议FAILED (remote: not allowed)bootloader 未解锁先执行 flashing unlockFAILED (remote: partition not found)分区名写错或厂商命名不同getvar all 查看实际分区表FAILED (remote: antirollback check fail)镜像版本低于设备防回滚基线换同版本或更高版本官方镜像waiting for device驱动未装 / 未真正进入 fastboot检查设备管理器并确认模式刷机失败的检查顺序我一般这样走fastboot getvar all确认设备型号、当前槽位、安全状态。对照镜像来源和版本确认防回滚基线是否满足。确认 bootloader 解锁状态未解锁时一切 flash 都会被拒。换线、换 USB 2.0 口、重装 bootloader 驱动。最后才怀疑工具包本身必要时解压一份新的 platform-tools 覆盖。这套顺序能覆盖九成以上的刷机失败。核心原则只有一条fastboot 模式下任何 flash 操作都可能造成不可逆损坏动手前备份数据动手时逐条验证。5. platform-tools 高频翻车现场5 个常见问题与排查路径前面的链路都正常时问题反而集中在环境层面。下面 5 条是社区问答和日常排查里反复出现的真实翻车点。5.1 adb 显示 offlineUSB 链路与 adb server 的排查顺序现象adb devices能看到序列号但状态一直 offline所有命令超时。原因数据线只有充电线芯USB 口供电或信号不稳设备端 USB 模式停在仅充电电脑上残留了旧版 adb server。解决按顺序做。先adb kill-server再重插线换一根确认能传数据的数据线插主板原生 USB 口而不是扩展坞手机 USB 用途切成文件传输还不行就在开发者选项里关掉 USB 调试再重新打开。玄学的一点是部分扩展坞就是不行换到机箱原生口立刻恢复。5.2 unauthorized 弹窗与 RSA 指纹授权失效现象设备状态为 unauthorized所有命令提示需要授权但手机没有弹窗。原因息屏或锁屏状态下弹窗不显示之前点过仅充电把弹窗吞了曾经勾选过不再提示。解决拔线手机解锁亮屏进「开发者选项 → 撤销 USB 调试授权」重插后在弹窗上勾选「始终允许」。电脑换了系统重装之后授权需要重新确认一次这是 RSA 指纹机制在正常工作不是故障。5.3 adb server 版本冲突多个 adb 共存时的黑匣子现象敲 adb 命令时报adb server version (xx) doesnt match this client (yy)。原因PATH 里同时存在多个 adb。模拟器、某跨平台调试工具、旧版平台包各自带了一套先被找到的那一个启动了旧 server后续客户端版本对不上。解决Windows 用where adbmacOS/Linux 用which adb找到实际命中的路径把解压的 platform-tools 目录在 PATH 里前移或删掉其他冗余 adb清掉后台 server 再重新adb start-server。血泪经验不要在系统目录里平铺散装 exe时间一长自己都分不清哪个在用。5.4 fastboot 认不到设备驱动与 USB 模式的组合问题现象fastboot devices输出为空但 Windows 设备管理器里出现带黄色感叹号的未知设备。原因fastboot 和 adb 走的是两套驱动接口装过 adb 驱动不代表 fastboot 驱动可用另有部分机型按键进入的不是 bootloader而是 recovery。解决先看屏幕确认是 bootloader 界面安装厂商的 bootloader 驱动或通用 fastboot 驱动换 USB 2.0 口部分设备要求按住音量键再插线。fastboot 模式比 adb 挑剔得多优先从驱动层排除再怀疑工具包。5.5 环境变量路径被抢占where adb 定位真实可执行文件现象明明解压了 platform-tools新开终端敲 adb 还是提示不是内部或外部命令。原因PATH 目录写错、setx 截断了超长变量或者 PATH 里另一个目录的旧版 adb 优先生效。解决用系统属性环境变量 GUI 检查目录是否真实存在重开终端where adb看实际解析到哪个路径把目标目录前移如果系统 PATH 被截断过在 GUI 里手动补回被丢掉的条目。这类坑和代码无关但出现频率最高排查时先看一眼环境再怀疑代码能省一晚上。6. 进阶用法无线调试与把 adb 写进批量脚本6.1 无线调试的 pair 流程与连接参数Android 11 及之后的设备支持无线调试不用插线也能装包抓日志。首次连接要先配对adb pair 192.168.1.23:37001 # 配对端口和配对码在无线调试界面里看 adb connect 192.168.1.23:5555 # 调试端口通常固定 5555 adb devices注意 pair 端口是动态分配的每次开启无线调试都可能变化而 connect 端口一般固定。两个端口不一样经常有人把 pair 端口填进 connect 里然后翻车。配对成功后拔线也能用断开重连只需 connect不需要再 pair。公司网络开了 AP 隔离时无线调试会一直连不上那是网络策略问题不是工具问题。6.2 多设备场景下的批量安装脚本设备多了之后逐台手敲命令不现实。Windows 下批量安装当前目录所有 APKecho off for %%f in (*.apk) do ( echo installing %%f adb install -r %%f )Linux/macOS 下要同时处理多台设备时需要显式指定设备序列号# 多设备批量安装只取状态为 device 的设备 for dev in $(adb devices | awk NR1 $2device {print $1}); do echo $dev adb -s $dev install -r app-release.apk adb -s $dev shell getprop ro.build.version.release done-s后面跟设备序列号多设备时不加会直接报错。awk 的作用是过滤掉 offline 和 unauthorized 的行避免对没就绪的设备执行命令。getprop 的 ro.product.model 是型号ro.build.version.release 是 Android 版本脚本开头先打印这两项确认设备没问题再继续安装。我现在的习惯是新环境第一件事就是把 platform-tools 解压到一个固定目录用where adb确认 PATH 只解析到这一处再把常用命令整理成脚本。这个习惯帮我少踩了很多次版本冲突和认不到设备的坑。希望帮到你。本文还有配套的精品资源点击获取