资讯详情

资讯详情

Windows下adb与fastboot实战:platform-tools r28.0.1使用指南

简介platform-tools_r28.0.1-windows 压缩包是面向 Android 开发与调试场景的官方平台工具包内含 ADBAndroid Debug Bridge等核心命令行组件可在电脑与 Android 设备之间完成连接管理、文件传输、应用安装卸载、调试日志抓取以及 shell 命令执行等任务适合移动开发者、测试工程师及 ADB 初学者使用。包内共包含 782 个文件整体约 5.9MB除了 ADB 主程序还收录了 adb_profile_chrome、atrace 等系统跟踪脚本以及大量 Python 脚本、JS/CSS/HTML 文档、配置与说明文件并带有 Windows 环境下可直接调用的 exe、dll 组件解压后即可使用。该资源已有 545 人学习下载能够帮助读者快速搭建可用的 ADB 工具链熟悉设备识别、APK 部署、shell 命令、多设备与 Wi-Fi 连接等关键调试方式。借助这些工具用户还能在性能监控、系统跟踪和故障排查中更高效地完成数据交换与问题定位显著提升 Android 应用开发、测试与维护的整体效率。1. adb工具在 Windows 上的真实形态r28.0.1 这个版本能做什么下载过刷机包或者做过安卓调试的人对 platform-tools 不会陌生它是安卓 SDK 里命令行工具的集合其中 adb 工具是日常开发、刷机、抓日志都绕不开的核心。r28.0.1 属于比较经典的发行版在 Windows 10 和 Windows 11 上都能跑解压出来就能用不需要安装安卓 Studio 这种重型环境。它解决的问题很具体设备连不上、驱动装不对、日志抓不下来、刷机刷一半掉线这些场景下 adb 工具都是第一道门槛。适合三类人做安卓应用调试的开发者、给手机刷机或救砖的折腾玩家、以及需要在命令行里批量管理多台安卓设备的测试人员。这篇文章我拆解这个版本的实际用法和踩坑点让你下载之后少走弯路。2. 环境准备与驱动安装四步把 platform-tools 跑起来2.1 先搞清楚 r28.0.1 的文件里藏着什么解压 platform-tools_r28.0.1-windows 之后你会看到几十个文件但真正干活的是这几个adb.exe、fastboot.exe、AdbWinApi.dll 和 AdbWinUsbApi.dll。前者是可执行主程序后两个是 Windows 平台运行 adb 必需的动态库很多人解压之后双击 adb.exe 提示“找不到 AdbWinApi.dll”就是因为把两个 dll 文件删掉了或者单独复制了 exe 出来。r28.0.1 这一版的另一个特点是它还内置了 etc1tool.exe、make_f2fs.exe 这类文件系统工具前者用于压缩纹理数据后者用于创建安卓设备用的 f2fs 格式分区镜像普通用户基本用不到这两个工具但不要删极少数刷机脚本会按名字去查找它们。把整个 platform-tools 目录放在一个稳定路径就很关键了。我一般会放到 C 盘根目录下比如 C:\platform-tools而不是放进 Program Files因为很多刷机脚本和自动化工具在拼接路径时对空格处理不严谨放在带空格的目录里fastboot 或 adb 的命令会因为路径解析出错而报 “unknown command” 或文件找不到。另外整个目录的权限也需要注意如果你把解压文件放到桌面上而 Windows 用户目录开启了受控文件夹访问adb server 创建日志文件时可能被拦截表现为启动失败或者连接设备后立刻断开。这个版本核对环境的操作也简单在解压目录按住 Shift 点击右键选择“在此处打开 PowerShell 窗口”输入下面的命令确认版本号。.\adb.exe version输出结果里能看到 Android Debug Bridge version 1.0.40version 行会显示 28.0.1说明当前目录正常。这个命令同时也验证了 AdbWinApi.dll 能被正确加载因为 adb.exe 启动时必须加载这个库。若提示缺少 dll用系统自带的修复工具处理不如重新解压一次来得快两个 dll 文件必须和 exe 在同一目录。2.2 环境变量配置把 adb 工具设成全局命令每次都在解压目录里敲 .\adb.exe 不是不行但效率太低而且后续配合脚本使用时命令里写绝对路径容易出错。所以把 platform-tools 加进系统环境变量的 Path 是最值得先做的一件事。步骤是右键“此电脑”选“属性”进入“高级系统设置”点“环境变量”在系统变量里找到 Path编辑并在末尾新增一行 C:\platform-tools换成你自己的实际解压路径。改完之后新开的命令行窗口才会生效旧窗口不生效这是个很多人踩过的坎——配置完环境变量之后原来的 cmd 窗口里敲 adb 仍然提示不是内部或外部命令其实是窗口没重开。做完这一步验证方式是在任意目录打开新的命令提示符窗口输入 adb devices。预期输出第一行是 List of devices attached下面暂时是空的或者列出了已经连接的设备。这一步只验证了 adb 工具本身能被系统找到不涉及手机。配置过程中需要留意的是 Path 变量多项之间用分号隔开编辑时不要误删已有的 %SystemRoot% 等条目否则会影响 Windows 系统命令的正常运行。某些第三方安全软件会拦截对系统环境变量的修改提示“注册表被修改”选择允许即可不必惊慌。2.3 设备驱动安装不装驱动连不上、识别成乱七八糟的设备先把一个事实说清楚在 Windows 上安卓设备的驱动分两种一种是 adb 接口驱动一种是 fastboot 接口驱动两者需要分别安装。adb 驱动用于正常开机状态下连接设备fastboot 驱动用于设备进入 bootloader 模式时连接。r28.0.1 自带一个通用的谷歌 USB 驱动包但 Windows 默认安装驱动时不一定能自动匹配到。常见现象是手机开了 USB 调试并插上电脑设备管理器里出现一个带黄色感叹号的“Android”或“其他设备”双击查看硬件 ID 能看到 VID 和 PID但系统识别不出设备类型。解决办法是手动指定驱动路径。打开设备管理器右键那个未知设备选“更新驱动程序”再选“浏览我的电脑以查找驱动程序”然后把路径指向 platform-tools 目录下的 usb_driver 文件夹Windows 会从中挑选匹配的驱动安装。注意勾选“包括子文件夹”否则会搜索不到。安装完成后设备名称会变成“ADB Interface”这时再去命令行里敲 adb devices就能看到设备序列号了。这里有个细节如果系统提示驱动签名问题是因为 Windows 对驱动签名有校验选择“仍然安装此驱动程序软件”即可。3. 基础命令与反直觉细节设备连接、文件读写、日志抓取3.1 有线连接与局域网连接adb devices 的两种形态有线连接是最稳定的形态直接拿数据线插上即可。但你会发现一个反直觉的现象设备已经通过 USB 连上了手机上也弹出了“允许 USB 调试吗”的对话框点了允许之后adb devices 里依然看不到设备。原因多半是 USB 连接方式选错了。安卓手机默认的 USB 模式可能是“仅充电”需要在下拉通知栏里把 USB 用途切换为“文件传输”或“MTP”adb 服务才会识别到设备。如果你用的是老旧数据线只支持充电不支持数据传输那么切换了模式也白搭这种情况经常被误判为驱动问题浪费时间排查半天实际上换一根线就好。adb devices -l加 -l 参数会显示设备的详细信息包括设备型号、usb 端口位置和产品名。当多台设备接入时这个参数能帮你分辨哪台对应哪个序列号不用盲猜。比如输出里面有 usb:1-1 和 usb:1-4 这样的端口标识对比你插线的物理位置就能锁定设备。这在后面用 adb -s 命令操作特定设备时尤其重要因为多设备环境下不指定序列号adb 工具会报错提示 multiple devices。局域网无线连接是第二个常用方式。手机和电脑连同一个 Wi-Fi先用 USB 线连接手机然后执行 adb tcpip 5555目的是让设备上的 adbd 服务从 USB 传输模式切换到 TCP 模式监听 5555 端口。完成后拔掉 USB 线再执行 adb connect 192.168.1.100:5555这里的 IP 换成手机在局域网里的实际地址它可以从手机 Wi-Fi 设置详情里查到。连接成功后后续操作与有线完全一致。无线连接在调试手头设备不带线时很实用但要注意设备重启或者 Wi-Fi 断开后无线调试会自动失效需要重新连一遍。另外adb tcpip 命令在部分定制 ROM 上可能被禁用表现为执行后提示 no such file or directory这是 ROM 层面的限制不是 adb 工具的问题。3.2 文件传输与日志采集adb pull、adb push、logcat 的组合打法设备场景里最常用的操作是往设备里推文件或者从设备里拉文件。用 adb push 把电脑上的安装包推到设备存储用 adb pull 把设备里的日志文件拉回电脑分析这一推一拉覆盖了绝大多数调试需求。命令格式和参数比想象中简单核心是路径别搞混。adb push C:\debug\app-debug.apk /sdcard/Download/ adb pull /sdcard/Download/crash.log C:\debug\logs\push 会把电脑上指定路径的文件复制到设备路径下pull 则相反。注意 Windows 路径用反斜杠设备路径是 Linux 风格用正斜杠这个容易混淆混用时 adb 工具会报 remote object 不存在之类的错误。设备路径建议写全/sdcard/Download/ 比 /sdcard/ 更符合使用场景因为绝大多数文件管理器默认展示的就是 Download 目录。pull 操作最实用的场景是抓取应用的崩溃日志和 ANR 日志它们位于 /data/anr/ 和 /data/tombstones/ 目录但这两个目录需要 root 权限才能直接读取普通调试机型拉取时会被提示 permission denied。遇到这种情况可以用 adb shell 进入 shell 环境后再配合 run-as 命令以应用本身的权限去读取自身目录下的日志文件。日志采集是 adb 工具的高频用法logcat 命令可以实时输出系统日志也可以把日志写到本地文件再慢慢看。最常用的是按时间和优先级过滤adb logcat -v time C:\debug\app_log.txt-v time 表示每行日志前面带上时间戳方便对齐崩溃发生的时间点。重定向符号 把终端输出写入文件注意这个是记录到 CtrlC 结束的也就是持续抓取。如果只想抓取特定应用或特定标签的日志加参数 *:S 是静默其他标签只输出目标标签的内容adb logcat -v time -s Unity:* ActivityManager:* C:\debug\unity_log.txt这里 -s 参数后面跟的是日志标签列表Unity:* 表示输出所有 Unity 标签的内容ActivityManager:* 表示输出系统 Activity 管理器的日志。这种组合写法的价值在于崩溃现场往往涉及应用层和系统层的交叉日志单独抓应用层看不到进程被杀的信息。抓完日志后强烈建议顺手记录下抓取时间点和触发操作日志文件动辄几十 MB事后回忆哪段对应哪个操作很痛苦对不上号等于白抓。3.3 应用安装与卸载adb install 的四个参数和 pm 命令的边界安装 APK 是 adb 工具的基础操作但它的参数细节很多人没细看。adb install 不加参数就是普通安装安装失败时看报错信息比瞎试更有效。adb install -r C:\debug\app-debug.apk adb install -d -g C:\debug\app-debug.apk-r 参数表示覆盖安装若电脑上有应用签名与手机上的不一致覆盖时会报 INSTALL_FAILED_UPDATE_INCOMPATIBLE这是签名冲突不是 install 本身的问题。如果目标是覆盖系统应用需要用 -r 配合 -d-d 表示允许降级安装即手机上的版本号高于 APK 版本号时也允许安装。安装完成后给应用授予所有运行时权限用 -g 参数在 Android 6.0 及以上设备上权限是动态申请的用 -g 可以跳过运行时的弹窗授权直接给默认权限。这三个参数通常组合使用。卸载应用时直接用 adb uninstall 包名注意参数是包名不是应用名。包名可以在应用详情页里查到也可以先用 pm list packages 命令筛选出来adb shell pm list packages -3 C:\debug\third_party_apps.txt-3 参数只列出第三方安装的应用包名系统自带的不会出现在列表里过滤掉了大量干扰信息。拿到包名之后再执行卸载。这里有个坑某些 ROM 里的预装应用虽然显示是第三方应用但实际上是用系统签名签的直接 adb uninstall 会报错提示 system app需要先 pm disable-user 停用才行。pm 命令的作用域比 install/uninstall 广它还能查询应用信息、设置应用的组件状态、清理应用缓存属于 shell 层的包管理器访问它不需要 root 权限但某些写操作需要对应权限。日常调试把它当作安装卸载命令的补充就好不要试图用 pm 实现系统级权限操作。4. Fastboot 与刷机流程救砖场景下的指令时序4.1 进入 bootloader 与 fastboot 设备识别刷机场景和日常调试场景用的是完全不同的工具日常用 adb 工具刷机用 fastboot 工具。fastboot 命令同样在这个安装包里不需要额外下载。手机进入 bootloader 的方式在各品牌上不一样但通用的命令是adb reboot bootloader设备正常开机时可以执行这个命令手机会重启进入 bootloader 界面。如果设备已经无法开机这个方法用不了就要靠实体按键组合绝大多数品牌是关机状态下按住音量下键加电源键部分品牌是音量上键加电源键具体组合在设备说明书里可查。进入 bootloader 后插入 USB 线连接电脑。此时在命令行执行一套 fastboot 的系统版本查询用来验证 fastboot 驱动是否正确安装fastboot devices这个命令的输出比 adb devices 简单得多识别到设备时会输出序列号加 fastboot 字样。如果输出为空原因几乎只有一个fastboot 驱动没有正确安装。设备管理器中此时会多出一个未知设备或“Android Bootloader Interface”之类的条目直接右键手动安装驱动路径依然是 platform-tools 目录下的 usb_driver 文件夹。这里有个注意点fastboot 模式下的设备 VID 通常和正常开机时不一样Windows 有时会把它当作新硬件重新处理需要重复一遍手动安装驱动的操作不要因为之前 ADB 接口驱动装好了就跳过这一步。r28.0.1 版本对 fastboot 设备的识别算是兼容性不错的主要问题集中在 Win10 以下系统上如果是老系统建议优先考虑兼容模式运行命令行程序。4.2 刷机指令的时序和各分区刷入后的操作顺序fastboot 刷机的本质是把镜像文件写入对应分区。常见的镜像分区是 boot、system、vendor、recovery对应的刷入指令是 fastboot flash boot boot.img分区名和执行命令之间用空格分开别和 adb 代码里常见的等号格式混淆。一个典型的刷机序列如下fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img fastboot flash recovery recovery.img每次刷入一个分区终端会输出几条进度信息最终显示 OKAY 或 Finished如果显示 FAILED通常是镜像文件与设备不匹配或者镜像本身损坏。镜像不匹配的情况在刷机场景里很常见某个系统镜像本来是为 A 设备制作的强行刷到 B 设备上fastboot 会直接拒绝报错里带 partition 字样的基本可以断定是分区大小或类型不兼容。刷完所有分区后最后一个指令是 rebootfastboot reboot设备重启后会退出 bootloader 并正常开机。第一阶段的启动可能比平时慢因为系统要重建缓存和优化应用屏幕在黑屏状态下停留较久是正常现象不需要干预。如果刷完系统后卡在开机界面或者循环重启不要急着重复刷同一个镜像先回到 bootloader 模式尝试只刷 boot 分区然后用 fastboot continue 命令继续启动看能否恢复。这个操作用来排查 boot 分区损坏导致的启动失败比重新刷全量镜像快得多也稳得多。4.3 锁分区与解锁分区刷机失败时最容易忽略的边界fastboot 操作里有一个很多人会忽略的边界读写锁。某些设备厂商在 bootloader 层面做了分区写保护刷入镜像时 fastboot 会报错提示 permission denied字面上看像文件权限问题实际上是设备的分区锁没有解开。不同设备解锁指令不同常见的有 fastboot oem unlock、fastboot flashing unlock执行后设备屏幕上会出现确认界面需要用音量键选择确认解锁。这是一个不可逆操作解锁后设备的系统更新校验会变更部分功能会失效所以不是每次刷机都需要解锁只有因为写保护导致刷入失败时才去动它。fastboot oem unlock解锁操作完成后设备会自动重启并清除用户数据这是厂商设计的强制数据擦除流程刷机前要把重要数据备份到电脑或云盘。解锁之后再重新进入 bootloader此时刷入镜像就不会再报权限错误了。这里有个经验刷机前先了解设备分区锁的状态别等到刷到一半报错再回头排查临时解锁导致数据全丢的例子不在少数。如果你只是替换 recovery 或刷 boot 镜像不涉及系统分区可以先原样试一次不一定非要解锁。r28.0.1 的 fastboot 工具对解锁命令的支持还算全面遇到不支持的命令时优先在设备官方渠道确认解锁方式而不是换用其他版本的 platform-tools因为解锁逻辑在底层工具版本的影响很小。5. 避坑与排查platform-tools 常见的七个翻车现场5.1 设备 offline 但驱动看起来一切正常现象adb devices 输出里能看到设备序列号但状态是 offline不是 device。此时执行任何命令都会报 error: device offline。原因adb 服务端与设备端的版本不匹配或者设备上的调试授权弹窗没有被正确确认。r28.0.1 是相对老的版本如果手机系统较新设备端 adbd 可能会主动拒绝老版本客户端的连接导致 offline 状态。解决先在命令行执行 adb kill-server再执行 adb start-server重新初始化连接。如果无效就去手机上的开发者选项里撤销所有 USB 调试授权再重新插拔 USB 线让手机再次弹出授权对话框选择允许并勾选始终允许。这种问题九成是授权状态脏了不是配置问题。5.2 adb server 启动失败端口占用导致无法连接现象执行 adb devices 时提示 daemon not running然后报 cannot bind tcp:5037同时显示端口被占用。原因adb 服务端默认监听 5037 端口有第三方安卓管理工具或另一个版本的 adb.exe 占用了这个端口。如果安装了其他安卓刷机辅助工具它可能自己带了一个常驻 adb server和官方工具抢端口。解决用管理员权限运行命令提示符输入 netstat -ano | findstr 5037找到占用端口的进程 PID。再到任务管理器里找到这个 PID 对应进程结束进程后执行 adb start-server。注意 adb kill-server 无法杀掉外部进程占用的端口必须手动终止进程。从那以后我每次装新的安卓工具前都会先检查本机是否已有 adb 服务在跑避免无谓冲突。5.3 设备管理器里显示未知设备手动安装驱动也失败现象插上手机后设备管理器出现“USB 设备不受识别”或带黄色感叹号条目点更新驱动选择 usb_driver 目录提示找不到匹配驱动。原因最常见的是 USB 线质量问题或 USB 端口供电不足。部分笔记本在 USB 3.0 接口上对旧设备的兼容性差设备枚举失败后无法上报正确的硬件 ID驱动自然匹配不上。另一个少见原因是系统被精简过缺失了 USB 标识相关的系统组件。解决先换一个 USB 2.0 接口或者换一根经过验证的线再看设备管理器是否有变化。如果硬件 ID 能显示 VID_18D1说明设备枚举正常手动安装驱动应该能成功如果硬件 ID 都是空的说明硬件层就没枚举成功和驱动无关。这里我给一个判断口诀驱动问题能看到设备但没装备硬件问题根本看不到设备。5.4 logcat 抓不到应用的日志但系统日志正常现象adb logcat 能输出系统进程日志但某个特定应用的日志完全没有。原因应用自身没有配置日志输出的标签或者应用发布版本禁用了 Log 输出。这个一般发生在 release 构建上混淆流程把日志输出代码裁剪掉了。还有一部分定制 ROM 对 logcat 的输出权限做了限制普通 shell 用户拿不到其他应用的私有日志。解决先确认应用标签名常见的格式是类似 MyApp 这种 Tag 加上下面这个日志命令adb logcat -v time -s MyApp:* C:\debug\myapp.txt如果仍然空换成 adb shell ps | findstr 包名核对应用进程是否存在。进程在但日志空说明日志输出被裁剪只能通过重新打包开启日志或者使用应用内的日志文件功能。还有一个点logcat 缓冲区有容量限制调试时间较长时老日志会被自动清除抓长日志时要及时分段落盘。5.5 adb install 报 INSTALL_FAILED_VERSION_DOWNGRADE现象执行覆盖安装时终端提示 INSTALL_FAILED_VERSION_DOWNGRADE应用装不上。原因APK 的 versionCode 低于手机上已安装版本的 versionCode系统拒绝降级安装。常见于测试版回滚场景之前在手机上装过内测版现在换回正式版正式版代码号反而更小。解决先执行 adb uninstall 包名卸载旧版本再执行 adb install 安装新版本。注意卸载会清除应用数据如果有需要保留的数据先备份。另外部分系统预置应用虽然显示可卸载但实际卸载操作因签名限制被拒绝此时使用 adb shell pm disable-user 包名来停用应用效果等价于把它从桌面和应用列表隐藏能保留数据又不影响系统稳定性。降级安装的限制不是 adb 工具的缺陷是安卓系统的版本管理机制违反它必然报错之后我处理版本回滚时一律先卸载再安装没有再遇到过这个提示。6. 把 ADB 用出效率脚本化日常操作日常调试里反复手动输入 adb 命令确实低效我习惯把常用的操作打包成批处理脚本双击就能执行省去每次敲一长串命令的时间。下面这个脚本解决的是抓日志场景一键清空日志缓冲区开始抓取带时间戳的完整日志结束后自动保存到桌面。echo off set LOG_DIR%USERPROFILE%\Desktop\adb_logs if not exist %LOG_DIR% mkdir %LOG_DIR% set LOG_FILE%LOG_DIR%\full_log_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.txt adb logcat -c adb logcat -v time %LOG_FILE%脚本首先设置日志保存目录为桌面下的 adb_logs目录不存在就创建。日志文件名里带时间戳按日期和时间生成抓取时不会覆盖旧日志后续追查问题时能按时间点精确对应。adb logcat -c 表示清空缓冲区由于日志缓冲区容量有限不清空的话抓取开始前的旧日志会占用空间导致新日志被部分丢弃。两个命令执行完成后终端会静止此时操作手机复现问题操作结束直接关闭命令行窗口日志文件已经完整写入。批量安装多台测试设备的 APK 是另一个高频场景我通常用这样一个循环脚本来处理先把所有 APK 放在固定目录然后遍历目录里所有安装包依次安装到已连接设备上安装失败的记录到文本文件里方便事后排查。echo off set APK_DIRC:\debug\apks set FAILED_LIST%APK_DIR%\failed.txt if exist %FAILED_LIST% del %FAILED_LIST% for %%f in (%APK_DIR%\*.apk) do ( echo installing %%f adb install -r %%f || echo %%f %FAILED_LIST% )脚本里 for 循环遍历 apk 目录下所有 .apk 文件依次执行带 -r 参数的安装失败时把文件路径追加写入 failed.txt。|| 语法在批处理里表示“当前一个命令失败时执行后面的命令”这是 Windows 批处理的常用写法。如果你的测试环境是多台设备同时接入脚本中的 adb install 会报错需要指定序列号这时可以改为先取出第一台设备的序列号再逐个安装for /f %%i in (adb devices) do ( adb -s %%i install -r %%f )脚本执行完后检查 failed.txt 里的文件名即可定位哪些设备或哪些安装包出问题。通过自带的子命令组合r28.0.1 这个版本的 platform-tools 几乎能覆盖调试、刷机、抓日志的全部日常场景。如果你也被日志抓不全、安装包反复倒腾这类问题困扰按上面这套流程把环境装好、脚本写好路径写对剩下的就交给你在实际设备上慢慢验证了。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →