简介:一份面向Android开发者、测试人员及设备维护者的ADB工具包,将Android调试桥常用命令与配套环境集中打包,可解决设备连接、文件传输、应用部署、日志抓取以及忘记密码后的屏幕解锁等典型需求。压缩包共23个文件,以9个exe程序、7个bat批处理、3个dll动态库为核心,另含2个txt说明文档和properties配置,整体仅1.88MB,小巧易用。已有19051人学习下载,深受实践者认可。工具包内含adb、fastboot等可执行文件以及若干批处理脚本,支持USB/无线连接、安装卸载APK、执行Shell命令、收集logcat日志、模拟触摸输入等操作;在设备进入恢复模式后,还可配合相关命令清除数据解锁,适合日常调试与应急维护,能显著提升Android开发与排障效率。
1. adb工具包为什么值得备一份:解锁与调试的第一步
做Android调试的人,桌面上都该有一份顺手的adb工具包。上周处理一台锁屏密码失效的测试机,我靠它成功解锁、抓日志、清理缓存,整个过程没装第三方App。无论解锁Bootloader、绕开屏幕锁、批量安装应用到抓崩溃现场,这套工具包都是最低门槛的公共基础。适合开发者、测试工程师,也适合想自己处理设备的进阶用户。比起临时去网上下零散文件,一体化打包能少踩一半驱动和命令不匹配的坑。它就是后面所有操作的起点,值得先弄明白它装了些什么。
2. 工具包内部结构:从fastboot到驱动的一体化清单
2.1 解压之后先看目录:bin、驱动与说明文档各管什么
大多数人拿到一份adb工具包,习惯性全部解压,然后直接双击adb.exe。结果是Windows报错“不是内部或外部命令”,因为当前目录不对。我一般会先把目录结构看一遍,确认platform-tools和drivers两个文件夹都在,再谈后续。
adb_toolkit/ ├─ platform-tools/ │ ├─ adb.exe │ ├─ fastboot.exe │ └─ AdbWinApi.dll ├─ drivers/ │ ├─ android_winusb.inf │ └─ install_driver.bat └─ README.txt这段目录结构基本是绝大多数Android调试工具包的标准布局。platform-tools里两个同名exe分别对应两条调试通道:adb.exe负责设备端到主机端的调试桥,fastboot.exe负责Bootloader阶段的刷写协议。AdbWinApi.dll是Windows下的动态库依赖,少一个,adb服务就起不来。drivers目录里放着设备驱动描述文件和一键安装脚本,专门解决设备管理器“识别不了”的问题。README里一般会写清楚适用平台、首次使用顺序和注意事项。
工具包里常见的几个文件作用可以先用下表记一下:
| 文件 | 关键作用 |
|---|---|
| adb.exe | ADB调试桥主程序,设备启动后使用 |
| fastboot.exe | Bootloader阶段刷机与解锁操作工具 |
| AdbWinApi.dll | Windows下ADB接口的动态库依赖 |
| android_winusb.inf | 通用ADB接口驱动描述文件 |
| install_driver.bat | 一键安装驱动的批处理脚本 |
如果你只是想在当前窗口临时用一次,不一定要改全局PATH,直接执行cd /d D:\adb_toolkit\platform-tools再运行adb就能用。但解锁和后续所有命令都可能在不同目录下触发,配好PATH才是长期方案。有些工具包会把fastboot.exe单独放一层目录,这个工具包选择统一放在platform-tools里,好处是升级平台工具时不会漏掉fastboot。实际使用时,建议先跑一遍install_driver.bat,等Windows提示驱动安装完成后再插入设备;插入顺序反了,设备第一次会被识别成便携设备,驱动装完还要手动拔插一次。
2.2 驱动与platform-tools为什么要分开:识别协议与调试协议不能混
adb和fastboot在Windows上分别对应两类驱动接口。ADB调试阶段,系统加载的是Android Composite ADB Interface;fastboot阶段,加载的是Android Bootloader Interface,不同SoC平台的引导加载接口名还不一样。这也是这个工具包把platform-tools和drivers分成两个目录的原因:platform-tools提供可执行程序,drivers提供让系统识别设备的“翻译层”。
新手最容易犯的错是只解压platform-tools、驱动没装,然后发现adb devices一片空白。常见做法是设备连接电脑之前先把USB驱动装好,再把platform-tools配到PATH。驱动不匹配的症状也有明显区分:adb devices能看到序列号但fastboot devices为空,或者反过来。这种情况通常不是工具包坏了,而是设备当前处于哪个阶段没对上:adb要求Android系统已经启动并开启了USB调试,fastboot则要求设备在Bootloader模式。
从协议角度看,adb走的是Android壳层,能执行shell命令、传输文件、转发端口;fastboot走的是Bootloader协议,只能在引导阶段做刷分区、解锁、重锁这类底层操作。解锁Bootloader时,设备重启到fastboot,adb命令就“失联”了,这是正常现象,不要以为工具包坏了。很多老教程喜欢把adb.exe和fastboot.exe复制到System32,这种做法能跑,但不推荐:一是污染系统目录,二是以后升级工具包时容易忘记旧文件残留,导致你连的是旧版本。解压后放独立目录、配PATH是最干净的方式。
2.3 环境变量配置与验证:三行命令让工具包常驻系统
配置持久化最常用的是setx,三行命令搞定前半段:
setx PATH "%PATH%;D:\adb_toolkit\platform-tools" adb version adb start-server # 启动后台服务setx会把系统PATH写入注册表并持久化,但副作用是读取原值再回写,重复执行会产生冗余路径,PATH超长时还可能有截断风险。第一次配置没问题,第二次以后可能出现重复的platform-tools项。更稳妥的做法是在“环境变量→系统变量→Path”里手动新增一条,避免污染原PATH。adb version用来验证路径是否生效;adb start-server会在5037端口拉起后台服务。
验证设备连接用这条:
adb devices -l # 列出已授权设备参数说明:-l让输出多一列设备型号,方便多台设备同时连接时区分。如果输出只有“List of devices attached”而没有具体条目,说明设备还没接入、授权弹窗没点,或驱动没有生效。先检查授权弹窗,再查驱动,顺序很重要。
3. 常用命令实战:文件传输、日志抓取与输入模拟的参数讲究
3.1 连接与授权:为什么第一次总弹未知来源
第一次连接时,手机上会弹出“允许USB调试吗?”的对话框,背后其实是RSA指纹交换。没有这一步,后面的命令全部白搭。先确认设备和电脑在同一物理连接下,然后运行:
adb devices -l # 列出当前连接的设备及授权状态 adb kill-server # 结束旧的后台服务,避免状态卡死 adb start-server # 重新启动后台服务代码说明:第一行先看设备是否出现以及状态;后两行在授权异常时用来重置服务。如果设备列表里显示的是unauthorized,说明指纹没确认,重新在手机上按“允许”;显示device才是正常可操作状态。-l参数会列出设备型号和连接通道,多台设备时有特别用处。
多设备同时插在电脑上时,命令要加-s指定序列号,否则adb会直接报“more than one device”。常见做法是先把adb devices的输出看一眼,再复制对应序列号。这里要养成一个习惯:授权完成后,先跑一次adb devices -l确认状态再继续,不要一上来就推包。
3.2 push与pull:传文件时最容易踩权限坑
设备上的存储路径并不全是可写的。App数据目录在普通权限下看不到,/data/local/tmp是少数不需要root就能写入的位置,所以测试APK通常推到这个目录:
adb push D:/projects/app-debug.apk /data/local/tmp/ # 推送测试包 adb pull /sdcard/Download/report.zip ./reports/ # 拉取工具生成的报告参数说明:push源路径在本机,目标路径在设备;pull正好反过来。-p参数可以显示传输进度,-a参数保留时间戳和权限位。第一次用的人容易栽在两个地方:一是pull时本地目标目录不存在,部分版本会直接报错甚至静默退出;二是路径带空格却没加引号,导致路径被拆成两段。把源文件名改成短路径、避免中文目录,能减少大部分麻烦。
我一般会在pull之后立刻用dir或ls确认文件大小和更新时间,防止手机端文件还在写入就强拉,拿回来一个不完整的zip。出现传输中断时,先看线和接口,再重置adb服务,这个排查顺序能省很多时间。
3.3 日志与截图:不装第三方App完成崩溃现场取证
调试崩溃问题最常用到logcat,抓取整段日志到本机文件:
adb logcat -v threadtime > crash_2025.log # 按线程时间格式记录日志 adb exec-out screencap -p > screen.png # 截图并保存到本机参数说明:logcat -v threadtime会给每行日志加上线程名和时间戳,定位死锁时必不可少;不加这个参数,崩溃前后的时间线会很难看。screencap -p是设备端截图命令,配合exec-out输出原始二进制流,在Windows下直接重定向就能拿到干净的PNG。不建议用adb shell screencap -p > screen.png,因为shell输出会在换行时混入CRLF,导致PNG文件损坏。
录屏取证一般用screenrecord,先录到设备再拉回本机:
adb shell screenrecord --time-limit 15 --bit-rate 4000000 /sdcard/demo.mp4 adb pull /sdcard/demo.mp4 .录屏命令里--time-limit最大180秒,--bit-rate控制清晰度和文件大小。录完记得手工删除设备上的临时文件,避免占满测试机的存储,尤其是交给测试部门的机器。
3.4 输入模拟:按键、滑动和文本输入的转义坑
自动化测试或解锁操作经常要模拟触摸和按键,几个最常用的命令:
adb shell input keyevent KEYCODE_POWER # 电源键,唤醒或息屏 adb shell input swipe 540 1600 540 400 300 # 从(540,1600)滑动到(540,400),耗时300ms adb shell input text 'adb%stoolkit' # 输入文本,%s表示空格参数说明:keyevent后面接键值码或键名,KEYCODE_POWER对应26,KEYCODE_HOME对应3。swipe五个参数依次是起点x、起点y、终点x、终点y、持续时间毫秒,屏幕分辨率不同,坐标要按设备实际尺寸算。input text不支持直接输入空格,用%s代替,特殊字符还要小心转义。
在写滑动脚本前,先执行adb shell wm size拿分辨率,再做坐标换算,不然不同分辨率的设备上,同一个滑动路径完全失效。这也是从新手到熟手的一个分水岭:命令本身不难,难的是先拿参数再构造命令。
4. 解锁场景实战:从Bootloader解锁到擦掉屏幕锁的完整流程
4.1 解锁Bootloader前必须确认的三件事
解锁Bootloader是很多后续操作的前置条件,但动手之前必须把三件事确认完:数据备份、OEM解锁开关、设备被清空的心理预期。解锁会清掉整机数据,这不是adb能改的规则,而是硬件级安全策略。
adb reboot bootloader # 重启到fastboot模式 fastboot devices # 确认设备进入fastboot fastboot flashing unlock # 执行解锁,部分平台命令是fastboot oem unlock-go代码说明:第一行让设备进入bootloader;第二行确认fastboot通道通;第三行是原生Android的解锁命令。部分SoC平台的解锁命令不同,有的还需要先绑定账号,在设置里看不到“OEM解锁”开关的话不要强行刷。执行解锁后设备会再次重启并恢复出厂状态,首次开机需要重新配置语言和网络。
提示:解锁操作会清空全部数据,执行前先备份,且只适用于自己拥有或获得授权的设备。
把解锁和刷机类比的话,解锁更像是“打开系统底层的修改权限”,刷固件只是权限打开后的一种操作。工具包里fastboot存在的原因就是处理这个环节。
4.2 设备已开机但进不了桌面:用adb绕开屏幕锁
忘记锁屏密码但系统还能响应adb时,操作空间要大得多。先尝试触发锁屏界面和清除口令:
adb shell input keyevent 82 # 发送菜单键,弹出锁屏快捷菜单 adb shell wm dismiss-keyguard # 请求系统解除当前锁屏遮罩 adb shell locksettings clear --old 0000 # 清除原有锁屏口令说明:input keyevent 82在部分设备上能唤醒锁屏下的快捷菜单;wm dismiss-keyguard对单纯无口令的锁屏有效,如果设了PIN或图案,它只能暂时挡住锁屏,不能真正清除口令;locksettings clear是Android 8以上提供的清口令接口,--old 0000表示原有口令是4位数字且为“0000”时使用,实际按记忆修改。
注意:清锁操作只应在设备归属明确、数据已备份的前提下执行。公司配发机器或他人设备,未经同意跑解锁流程是越界操作。
解锁屏幕锁的最干净路径是先在设置里关掉锁屏,再用adb shell locksettings确认当前状态。这条路径比删/data/system/locksettings.db安全得多,后者需要root且容易把系统配置文件搞坏。
4.3 解锁状态查询与重上锁:别让设备一直处于解锁态
设备长时间保持Bootloader解锁,会让部分安全校验失效,出问题时排查边界变大。刷完或处理完,养成重上锁的习惯:
fastboot getvar unlocked # 查询当前解锁状态 fastboot oem lock # 重新上锁,部分平台用fastboot flashing lock说明:getvar unlocked返回的通常是unlocked: yes/no,用返回值判断是否需要在重锁前留出操作空间。oem lock之后设备会再次清空数据,所以重上锁前一定要确认后续不再需要刷写分区、不再需要修改boot。重锁完成后,再用fastboot getvar unlocked查一遍,返回no才算成功,这样下次遇到设备状态异常时好定位原因。
4.4 解锁后第一次开机的检查清单
解锁或重锁后第一次开机,不要急着装App,先验证系统完整性:
adb shell getprop ro.boot.flash.locked # 查看引导加载锁状态 adb shell getprop ro.boot.vbmeta.device_state # 查看系统校验状态 adb shell dmesg | grep avb # 检查AVB验证链路是否报错说明:ro.boot.flash.locked取值通常为1或0,表示引导加载锁是否处于锁定状态;ro.boot.vbmeta.device_state表示设备验证状态,正常设备会返回表示锁定的字符串,具体值因SoC平台而异,重锁完成后主要看有没有AVB报错。dmesg | grep avb能看到启动引导阶段是否出现校验失败记录。如果指纹、人脸这类生物识别被清空,是正常的,重新录入即可;如果系统一直提示“系统已损坏”,则需要把对应分区刷回原厂再重锁。
5. adb工具包避坑与常见问题排查:驱动、端口、授权与玄学
工具包本身没问题,但用户环境千差万别。以下五类问题是我最长遇到的,每条都按现象、原因、解决的顺序记录,方便排查。
5.1 设备管理器显示未知设备:驱动装了但没生效
现象:adb devices输出为空,Windows设备管理器里能看到一个带黄色感叹号的Android设备,提示“无法启动该设备”。
原因:驱动安装包里的inf文件没有被系统正确签名,或安装顺序反了。最常见的是设备先插入,系统自动装了自带驱动,后续通用inf不生效。还有些设备用了新版SoC,旧驱动里根本没有对应的硬件ID。
解决:先卸载设备管理器里的错误驱动,拔掉USB线,运行install_driver.bat,等待提示“安装成功”后再插线。如果还是感叹号,在设备管理器里右键更新驱动,手动从计算机驱动列表里选择,浏览到drivers目录强制指定。做这一步时把“兼容的硬件”勾选取消,更容易看到正确项。
5.2 端口被占用:adb server起不来
现象:执行adb start-server,提示cannot bind to :5037。
原因:某程序占用了adb默认的5037端口,常见的残留adb进程没结束,或某个手机助手类App也启动了adb服务。这类问题不影响手机数据,但会卡住所有后续命令。
netstat -ano | findstr 5037 # 查占用端口的PID adb kill-server adb start-server第一行查出占用进程的PID,看进程名是不是残留的adb;如果是,直接adb kill-server后重启服务;如果是第三方进程,结束对应PID后再启动。不要直接taskkill /F /PID乱杀,先确认占用方是谁,不然杀错进程反而把正常服务干掉。
5.3 授权弹窗错过:设备一直处于unauthorized
现象:adb devices能看到设备,但状态一直是unauthorized,按什么都不弹授权框。
原因:第一次连接时点了取消,或后续在开发者选项里撤销了USB调试授权。电脑端密钥变化也会触发重新授权,比如系统重装后没有删除旧的授权记录。
解决:先去设备的“开发者选项→USB调试→撤销USB调试授权”,拔线重插,电脑端重新弹窗确认。如果还是不弹,用adb kill-server && adb start-server重置本机服务再重插。这个操作相当于把电脑端指纹清掉,重新走一次握手,比重启电脑省事得多。
5.4 线材与接口的玄学:传输不稳定先查物理层
现象:push大文件到一半报错,截图偶尔成功偶尔失败,adb devices时好时坏。
原因:数据线只支持充电不支持数据传输,或者USB接口供电不稳定。这类问题在代码层面看不到任何报错线索,最容易被误判成工具包损坏。
解决:换一根原装数据线,插主机背板的USB口,避开前置接口和延长线。排除物理层后再看软件,顺序不要反。调这类玄学问题,我的习惯是把手边所有线都试一遍,往往最旧的那根线反而是罪魁祸首。另外,USB节能模式也可能造成设备频繁掉线,在设备管理器对应USB根集线器的电源管理里关掉“允许计算机关闭此设备以节约电源”。
5.5 32位工具与64位系统:老工具包在新电脑上的兼容问题
现象:双击adb.exe没有任何反应,命令行执行直接退出,或提示不是有效的Win32程序。
原因:工具包里的exe是32位或非常老的版本,与当前系统运行库不匹配,也可能是下载过程中文件损坏。老版本platform-tools在Win11上经常出这种问题,驱动签名也过不了。
解决:换成64位版本的platform-tools再试。运行时如果提示缺失dll,说明系统缺少对应运行库,把运行库装好再跑。这里也能看出工具包一体化的价值:drivers和exe打包在一起,版本配好,能少很多“启动即消失”的问题。
6. 进阶技巧:用一组adb命令拼出整机信息采集脚本
6.1 把设备信息串成一行
如果只是临时看一下某台设备的型号、系统版本、分辨率,单条命令地敲也行,但设备一多就乱。常见做法是把多个getprop和wm命令拼进一个shell调用:
adb shell "date; getprop ro.product.model; getprop ro.build.version.release; wm size; wm density; cat /proc/meminfo | head -n 3"一次性输出采集时间、设备型号、Android版本、屏幕分辨率、逻辑密度和内存摘要。这样运维时能用一条命令确认设备的基本面,不用反复切换窗口。
6.2 加时间戳输出到文件
单次调用可以把结果重定向到本地文件,文件名加时间戳避免覆盖旧记录:
adb shell "date; getprop ro.product.model; getprop ro.build.version.release; wm size; wm density; cat /proc/meminfo | head -n 3" > device_info_$(date +%Y%m%d_%H%M%S).txt用宿主机命令展开$(date +%Y%m%d_%H%M%S),生成类似device_info_20251014_153032.txt的文件,下次采集不会挤掉上一次结果。注意时间戳在宿主机生成,不是设备时间;如果设备时间本身不准,文件内容里的date输出会一起记录,方便对照。
6.3 多设备循环采集
桌上连着好几台测试机时,用adb devices过滤出已授权设备,再逐台取型号:
for DEV in $(adb devices | awk '$2=="device" {print $1}'); do adb -s $DEV shell getprop ro.product.model done代码说明:adb devices输出的第二列是设备状态,awk过滤出状态为device的行,再打印第一列序列号;-s $DEV指定在某一台设备上执行。这个循环可以换成任何命令,比如批量装应用、批量pull日志。这个循环体在Git Bash或类Unix shell里直接跑,Windows cmd需要改写成for /f结构,思路一样。
这个采集脚本没有复杂逻辑,但把“先确认设备在哪、再按序列号操作”的思路固化了。从那以后,我每次拿到一批陌生设备,都会强制先走一遍“采集型号、检查授权、备份数据、再动锁与分区”的顺序。adb工具包本身不复杂,复杂的是用之前有没有先把授权和驱动这块脏活清干净。希望帮到你。
本文还有配套的精品资源,点击获取