简介:这是一份可以直接运行的adb工具包,定位为Android调试与设备管理辅助工具,面向移动开发、逆向分析及刷机维修人群。它内置了ADB客户端、服务端与守护进程的协作机制,支持USB或无线方式连接设备,集成了文件推拉、shell命令执行、logcat日志收集、屏幕解锁等能力,既可服务日常开发和自动化测试,也能应对设备忘记密码的应急场景。压缩包共23个文件,整体仅1.88MB,以exe可执行程序、bat批处理脚本和dll动态库为主体,辅以txt说明和properties配置,无需安装完整SDK即可快速搭建调试环境。已有19038人学习下载。包内包含adb.exe、fastboot.exe、AdbWinApi.dll等核心组件,并配有多个批处理脚本,可简化APK安装、设备重启、文件传输等操作;同时附带的解锁命令参考,给出了恢复模式下的数据清除思路,帮助用户解决屏幕锁死问题。整体结构紧凑、入口清晰,适合需要轻量级ADB工具链的开发者直接使用。
1. 说“这个是adb工具包”之前:先弄清你手里缺的是不是这一个包
很多刚入行的同事找我拷文件,开口就是“给我个 adb 工具包”。我一般先反问一句:你要的是那个单文件 adb.exe,还是整套能连、能调、能抓日志的东西?这两个答案差着十万八千里。这个标题里的 adb 工具包,指的是 Android Debug Bridge 的完整运行环境,也就是除了 adb.exe 本体,还要有 AdbWinApi.dll、AdbWinUsbApi.dll 两个运行库、fastboot.exe、驱动说明和一批常用命令脚本。它解决的核心问题就一个:让任何一台 Windows 电脑在十分钟内具备对 Android 设备的完整调试能力,而不是每次都在网上现搜命令、现下驱动。适合谁?前端开发、嵌入式调试、测试、搞过电视盒子和车机 HMI 屏的人,都值得备一份。
2. 装好就用的 adb 工具包:从 PATH 到 devices 的完整验证流程
拿到工具包的第一件事不是双击 adb.exe,而是先把环境跑通。很多人卡在“明明解压了,输入 adb 却提示不是内部或外部命令”,根源就是环境变量没配。我一般把工具包放固定目录,比如D:\platform-tools,然后做两件事:验证文件完整性、配置 PATH。
2.1 把工具包放进 PATH:Windows 11 和 Win10 都适用的配法
先检查解压出来的文件是否齐全。一个能正常工作的 adb 工具包至少要有这四样:adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll、fastboot.exe。缺了 DLL 的阉割版一运行就报“找不到 AdbWinApi.dll”,这是最常见的翻车现场。
配置 PATH 有两种方式,临时生效和永久生效:
# 临时生效(只对当前命令提示符窗口有效,关掉就失效),适合快速验证 set PATH=%PATH%;D:\platform-tools # 永久生效,注意别直接 setx PATH=%PATH%;D:\platform-tools 这么写 # 因为 setx 会把 PATH 截断成 1024 字符,容易弄丢原有变量 # 先备份原值,再追加 setx PATH "%PATH%;D:\platform-tools"这里我吃过一次亏:图省事直接setx PATH覆盖,结果把系统里原有的 Python 和 Node 路径全截断了,重启后一堆命令失效,只好去注册表手工改回来。所以建议第一步先用临时生效验证工具包本身没问题,确认能用再考虑永久写入。
配置完 PATH 后,新开一个终端输入adb version,输出类似Android Debug Bridge version 1.0.41就说明工具包本体没问题。注意:如果你的终端是在配置 PATH 之前打开的,需要关掉重开,否则读不到新环境变量。
2.2 第一次连接真机:从授权弹窗到 device 状态的全流程
环境变量配好后,把手机用数据线插到电脑上。这里有个容易被忽略的前提:手机必须开启“开发者选项”里的“USB 调试”,部分机型还要在开发者选项里打开“USB 安装”和“USB 调试(安全设置)”,否则连上了也会被系统拦下来。
连接后的第一条命令永远是adb devices,它会列出当前识别到的所有设备:
# 列出设备,-l 参数显示更详细的设备信息(型号、传输状态) adb devices -l第一次连接时,手机屏幕上会弹出一个 RSA 密钥授权确认框,写着“允许 USB 调试吗”,后面跟着一串电脑指纹。必须点“允许”并勾选“始终允许使用这台计算机进行调试”,电脑端才会看到设备状态变成device。如果没弹窗,设备状态会一直停在unauthorized,这时候你做什么都白搭。
看到类似这样的输出就说明连接成功了:
List of devices attached R5CT20BGKAF device product:polaris model:MI_8 device:polaris状态列有四种:device是正常可用,unauthorized是没点授权或授权被撤销,offline是驱动或线材问题,no permissions通常是 Linux 下的权限问题,Windows 上少见。
2.3 认设备最快的三条命令:版本、序列号、状态
不管后面要做什么,我习惯先跑一遍这三条命令,确认当前环境是好的:
# 查看 adb 自身版本 adb version # 查看设备序列号加系统版本 adb get-serialno adb shell getprop ro.build.version.release # 查看设备状态(device / offline / unauthorized) adb get-stateget-serialno在多设备环境下特别有用,后面所有操作都要靠序列号区分目标设备。而getprop ro.build.version.release能拿到 Android 大版本号,这决定了你能不能用某些高版本才有的命令。比如adb shell wm在 Android 4.0 之后才稳定可用,老车机如果跑的是 Android 2.x,几个窗口管理命令就可能报错。这三条命令跑完,基本就能确定工具包是可用的、设备是连着的、系统是能操作的。环境这层地基打牢了,后面的具体操作才有意义。
3. adb 工具包能干的七件事:截图、日志与屏幕方向的真机实操
工具包的价值不在于 adb.exe 本身,而在于它能触达设备上的绝大多数系统能力。我把日常调试里用得最多的几类操作拆开讲,每条命令都能直接抄。注意每个命令都默认设备已连接且状态为device。
3.1 截图与录屏:一条命令把真机画面搬到电脑上
做测试写 bug 报告的时候,截图是最刚需的操作。很多人还在用手机自带的截图键再传到电脑,效率太低。用 adb 两步就能完成:
# 第一步:在设备上截图,保存到设备 /sdcard 目录 adb shell screencap -p /sdcard/screen_$(date +%Y%m%d_%H%M%S).png # 第二步:把截图从设备拉到电脑当前目录 adb pull /sdcard/screen_$(date +%Y%m%d_%H%M%S).png这里的-p参数指示输出 PNG 格式,避免部分老设备默认输出 JPEG 导致透明通道丢失。$(date +%Y%m%d_%H%M%S)是让文件名带上时间戳,批量截图时顺序不会乱。执行第二步前可以先在设备上确认文件名,也可以直接用adb pull /sdcard/screen.png配合固定文件名。
录屏比截图稍微麻烦一点,因为涉及时长和分辨率参数:
# 录屏 10 秒,分辨率 720x1280,保存到设备 adb shell screenrecord --size 720x1280 --time-limit 10 /sdcard/demo.mp4 # 拉回电脑 adb pull /sdcard/demo.mp4--size控制录屏分辨率,不写就默认设备原始分辨率,文件会大很多。--time-limit最大只能设 180 秒,超过 3 分钟的视频需要分段录,这是 Android 系统层面的限制,不是工具包的问题。录屏文件是 MP4 格式,直接能播放,不用转换。
3.2 logcat 按等级抓日志:崩溃定位的最快路径
App 闪退、ANR、系统服务异常,第一反应都应该是抓 logcat。工具包在这块的价值体现得最明显——没有 adb,你只能干瞪眼弹窗截图。
# 抓取全部日志,输出到电脑文件,Ctrl+C 结束 adb logcat -v threadtime > app.log # 只抓 Error 级别以上的崩溃日志,过滤噪音 adb logcat -v threadtime *:E # 单独抓崩溃缓冲区(比普通缓冲区更利于定位 native crash) adb logcat -b crash -v threadtime-v threadtime的意思是每条日志前加线程 ID 和时间戳,定位多线程并发问题必备。*:E是日志级别过滤器,常见的有V(冗余)、D(调试)、I(信息)、W(警告)、E(错误)。只关心崩溃就*:E,想看网络请求细节就*:D,但要做好刷屏的准备。
实际工作中我更推荐带关键字过滤的写法:
# 只保留包含关键字(如包名或异常类名)的日志 adb logcat -v threadtime | grep -i "your_app_package\|FATAL"注意 Windows 的 cmd 里没有grep,需要装 Git Bash 或直接用 PowerShell 的Select-String。如果只是临时看一眼,adb logcat -d可以打印当前缓冲区后就退出,不阻塞终端,适合快速判断“刚才到底崩了没”。
3.3 用 wm set 改屏幕方向:HMI 屏和车机调试的刚需
这个是我在调试 HMI 专用工具包 v6.3 时逐渐摸熟的场景。HMI 屏经常固定竖屏或横屏,但 App 本身没有适配所有方向,这时候与其改代码,不如直接用wm命令在装机阶段把方向锁死。
# 查询当前屏幕分辨率和密度 adb shell wm size adb shell wm density # 强制设置分辨率为 720x1280(部分应用和屏参不匹配时可以这样兜底) adb shell wm size 720x1280 # 锁定用户旋转方向:0 是竖屏,1 是横屏(顺时针 90 度) adb shell wm set-user-rotation lock 1 # 恢复出厂方向(不锁) adb shell wm set-user-rotation freewm set-user-rotation lock 1的效果是强制横屏,且用户在系统设置里手动旋转也不会改变方向,适合固定安装的收银机、立式广告屏和车机中控。注意这个命令在部分定制 ROM 上可能需要 root 权限,AOSP 原生机型一般直接可用。
这里有个高频笔误值得单独提醒:有人会顺手敲成adb shell vm,然后报错vm: not found。vm是虚拟机管理命令,和窗口管理器wm(Window Manager)完全是两码事。如果wm set-user-rotation在你的设备上报Current display is not a display with fixed user rotation,先看看系统设置里是不是已经开启了“自动旋转”之外的锁屏选项,部分机型要先把“自动旋转”关掉再执行这个命令才能生效。
3.4 安装、卸载、清缓存:包管理器三件套
日常提测、验证、回归,安装卸载是最频繁的操作。工具包自带的adb install系列命令比把 APK 传到手机再手动安装快得多:
# 常规安装,保留数据 adb install app_release.apk # 覆盖安装,保留数据和缓存,适合测试包升级场景 adb install -r app_release.apk # 允许版本号回退的安装(高版本降回低版本,测试降级时用) adb install -d -r app_release.apk # 卸载应用但保留数据 adb uninstall -k com.example.package # 彻底卸载,连数据一起清掉 adb uninstall com.example.package-r是 reinstall 的缩写,覆盖安装时如果没加这个参数,遇到已存在的应用会直接报INSTALL_FAILED_ALREADY_EXISTS。-d允许降级,这个参数在中台测试降级路径时是后悔药,不加的话高版本降低版本会被系统拒绝。-k在卸载时保留应用数据,加了之后重装能恢复到卸载前的登录态,但也会把出问题的缓存数据一起留着,所以排查“重装后仍崩溃”这种问题时,建议去掉-k做一次干净卸载。
此外还有一个常用组合是清缓存后冷启动:
# 强制停止应用 adb shell am force-stop com.example.package # 清空应用缓存和用户数据后重新启动 adb shell pm clear com.example.packagepm clear相当于“恢复出厂状态”,App 的登录态、数据库、SharedPreferences 全部清空。这个命令在测试首次启动引导流程时非常省事,不用手动去系统设置里一个个点。
4. adb 授权失败与连接翻车的排查:最常见五个坑
不管工具包多完整,连接层的坑永远最多,而且很多坑看起来毫无规律,玄学成分极高。我把这些年高频踩过的五个问题整理出来,按现象到解法讲清楚。
4.1 unauthorized 一直不消失:授权缓存与驱动冲突
现象是adb devices能看到设备,但状态一直是unauthorized,怎么等都不变。
原因分两类。第一类是驱动层面的问题:设备上的“允许 USB 调试”弹窗没弹出来,或者弹出来了但没点“始终允许”。第二类是授权缓存损坏:之前授权过的电脑换了 USB 口、升级了系统签名,导致原授权失效。
解决办法按顺序操作:
# 第一步:重启 adb 服务,清掉已缓存的设备授权状态 adb kill-server adb start-server # 第二步:设备上手动撤销所有 USB 调试授权 # 开发者选项 -> 撤销 USB 调试授权 -> 确认 # 第三步:拔掉 USB 线,重新插上,观察手机弹窗 # 如果还是不弹窗,检查驱动(Windows 上常见) # 设备管理器 -> 便携设备 / Android 设备 -> 右键更新驱动小米系手机和部分国产品牌还有个额外开关叫“USB 安装”或“USB 调试(安全设置)”,没开的话即使授权了,adb install也会被系统拦下来,报INSTALL_FAILED_USER_RESTRICTED。如果电脑上装过厂商自己的手机助手(如小米助手、华为助手),优先卸载,它们自带的驱动经常和老版本 adb 工具包冲突,表现为“设备管理器里驱动显示正常,但 adb 永远 offline”。
4.2 5037 端口被占用:连接闪断的真相
现象是adb devices偶尔能列出设备,但执行任何命令都卡住,或者提示cannot bind to 127.0.0.1:5037。
原因是 adb server 默认监听 5037 端口,如果被其他程序占用,adb 无法启动新的服务实例。常见占用者包括:其他版本的 adb 进程、Android Studio 自带的 adb、模拟器、部分刷机工具的残留进程。
排查和解决:
# 查看 5037 端口被哪个进程占用 netstat -ano | findstr 5037 # 根据输出中的 PID,强制结束该进程(以 12345 为例) taskkill /F /PID 12345 # 然后重启 adb 服务 adb kill-server adb start-server如果发现占用者是另一个 adb.exe,说明机器上存在多份工具包。最常见的是 Android Studio 自带一份platform-tools,你手动解压的工具包又起了一份。解决方案是只保留一套,把另一套的 PATH 删掉。两个版本的的 adb server 会互相打架,状态飘忽不定,杀进程重启只能管一时。
4.3 多设备与 USB 转接:为什么 offline 永远比 device 多
现象是同时接了手机和开发板,adb devices里能看到好几个,但有状态是unauthorized,有的是offline。
原因是 adb 对多设备的支持依赖每个设备的 USB 序列号。USB 转接坞、HUB、延长线如果质量差或供电不足,设备会反复掉线,状态在device和offline之间跳。
常见做法是先固定设备身份:
# 查看所有设备详情,看清哪个是哪个 adb devices -l # 指定序列号操作,避免误操作到另一台设备 adb -s R5CT20BGKAF shell getprop ro.product.model adb -s emulator-5554 install app.apk给每台设备贴标签纸写序列号是土办法但极其有效。如果设备总是处于offline,先换一根 USB 线,其次换一个电脑后置 USB 口(后置供电比前置稳定),最后再考虑换 HUB。九成的 USB 玄学问题都能在这三步里解决。我的一贯原则是:能用原装数据线就不用第三方线,能直插就不经过 HUB。
4.4 厂商屏蔽 adb:老电视和车机默认连不上
现象是手机连电脑没问题,但同一套工具包去连电视盒子、车机屏幕,adb devices一片空白。
原因是厂商在固件层面关闭了 USB 调试入口。海信机顶盒、创维电视、吉利部分车机,默认都不开放 adb,需要先在系统设置里进入隐藏的开发者模式,或者通过厂商渠道开启调试功能。网上流传的“算码器”“工具包”本质上是针对特定固件版本的私有授权协议逆向产物,用之前自己评估风险:固件升级后大概率失效,而且可能触发厂商的保修限制。
我在车机 HMI 调试中的经验是,优先问设备厂商要官方调试文档和专用驱动,比在网上找通用工具包靠谱得多。如果官方明确不开放 adb,可以考虑用系统自带的网线调试、串口调试或者厂商私有 HMI 协议替代,别在 adb 这条路上硬磕。
4.5 数据线是充电线:一个被忽视的 90% 翻车源
现象是插上电脑后手机显示在充电,但adb devices就是看不到设备,设备管理器里也没有出现 Android 相关设备。
原因是很多第三方 USB 线是纯充电线,里面根本没有数据线芯,或者数据线芯断了。充电线和数据线外观几乎一样,用肉眼看不出区别。
我的迅速判断法是看线材上的标识:USB 2.0 数据线一般有28AWG/28AWG的印字,纯充电线通常只有电源相关标识。更直接的办法是迅猛换一根确定能传文件的线,插上再看看设备管理器有没有反应。另外注意台式机前置 USB 口有时候只有充电能力,数据信号没接出来,要插后置口才能识别。每次连接失败,我第一句问的就是“你换过线了吗”,十次里能解决一半问题。
5. 把 adb 工具包改成顺手脚本:从裸命令到能交差的效率工具
命令背熟了之后,下一步是让工具包适配自己的日常流程。我一直觉得只会敲单条命令等于没用透工具包,真正的价值在于把固定流程固化成脚本,让新来的同事也能一键操作。
5.1 用批处理把常用命令包成菜单
Windows 下最省事的封装方式是写一个adb_tools.bat,把高频操作做成菜单。
@echo off title ADB 工具包快捷菜单 :menu cls echo 1. 查看设备列表 echo 2. 截图并保存到电脑 echo 3. 抓取崩溃日志 echo 4. 安装 APK echo 5. 退出 set /p choice=请选择操作序号: if "%choice%"=="1" adb devices -l if "%choice%"=="2" ( adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png ) if "%choice%"=="3" adb logcat -v threadtime *:E if "%choice%"=="4" ( set /p apk=拖入 APK 文件路径: adb install -r "%apk%" ) if "%choice%"=="5" exit pause goto menu这个脚本的逻辑很直白:用cls清屏,用choice变量接收用户输入的数字,然后用if分支执行对应命令。其中截图操作在批处理里用了换行加括号的组合,注意(和)之间的命令必须逐行写,不能写在同一行。安装 APK 时用set /p等待用户拖入文件路径,Windows 会自动把拖入的文件路径填到变量里,注意路径带空格时要加引号。
脚本放在与adb.exe同一目录下,配合 PATH 环境变量,在哪都能运行。建议把adb devices -l放在菜单第一个选项,保证每次操作前先确认设备状态。
5.2 用 Python 封装 logcat 保存与超时控制
批处理适合交互式操作,但如果你需要在测试机上定时抓日志、按关键字过滤,Python 是更顺手的方案。我用 Python 做过一个简版工具,用subprocess启动 adb,边输出边过滤:
import subprocess import time # 启动 logcat 子进程,实时读取输出 proc = subprocess.Popen( ["adb", "logcat", "-v", "threadtime", "*:E"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, encoding="utf-8", errors="replace", # 避免个别日志编码异常导致进程崩溃 ) # 记录启动时间,设置抓取总时长(单位:秒) start = time.time() timeout = 30 # 按行读取,命中关键字即写入本地文件 with open("crash.log", "w", encoding="utf-8") as f: for line in proc.stdout: elapsed = time.time() - start if elapsed > timeout: proc.terminate() # 超时后强制终止 logcat 进程 break if "FATAL" in line or "AndroidRuntime" in line: f.write(line) f.flush() # 及时落盘,避免程序异常退出丢数据 # 结束条件:同时监听设备断开事件 if "device disconnected" in line: proc.terminate() break这段脚本的关键点有三个:第一,encoding="utf-8"配合errors="replace",避免某条日志用了非 UTF-8 编码导致整个循环异常退出;第二,超时控制用的是proc.terminate(),不是proc.kill(),前者给 adb 进程一个收到终止信号的机会,干净退出;第三,按行实时写入文件并flush(),防止进程中途崩溃时已读取的日志丢失。如果你要抓的是系统级崩溃日志,把*:E换成*:V,但体积会大很多,建议同时启用文件按大小滚动写,不要一个文件硬扛。
5.3 验证工具包真伪:版本代号对不上就是阉割版
网上流传的 adb 工具包鱼龙混杂,有的人把一个adb.exe单独发出来就敢叫工具包。我建议拿到任何工具包后,先做一次完整验证,三分钟能查出大部分问题:
# 检查文件完整性 dir D:\platform-tools # 检查 adb 版本是否正常 adb version # 检查 adb 是否具备完整命令集 adb helpadb help输出里如果连screencap、logcat、wm都没有,说明这是个极老版本的 adb,很多新命令不支持。正常 1.0.41 版本的支持范围比较全,个别老设备可能需要旧的 1.0.32,那就把新旧两套放不同目录,按设备区分调用,不要混用。
做这层验证的意义是避免在排查问题上浪费时间,因为阉割版的报错和正常版完全不同。比如缺 DLL 的工具包,一启动就弹“找不到 AdbWinApi.dll”;被精简过的工具包,adb shell wm直接提示no such command。遇到这类情况果断换官方完整版,别试图给阉割版补文件,补完也不知道还缺了什么。
6. 自己整理一套 adb 工具包:最小文件清单和我的维护习惯
与其在网上四处找合集,不如花十分钟自己整理一套干净的工具包。我的做法是去 Android 开发者官网下载官方platform-tools压缩包,解压后只保留必要文件:
| 文件 | 作用 | 是否必备 |
|---|---|---|
| adb.exe | 调试桥主程序 | 必备 |
| AdbWinApi.dll | Windows 下 adb 运行库 | 必备 |
| AdbWinUsbApi.dll | Windows 下 USB 驱动支持 | 必备 |
| fastboot.exe | 刷机模式工具 | 推荐保留 |
| source.properties | 版本元数据,供工具识别 | 保留 |
| NOTICE.txt | 开源协议声明 | 保留 |
我习惯在工具包根目录建一个README.md,写上版本号和三个常用命令示例,方便同事拿到手不提问就能用。解压后建议跑一遍adb version确认版本,再插一台真机跑一遍adb devices确认环境,就绪后把整个目录弄成压缩包存档,标好日期和版本号。
最后说两个维护习惯。第一,Android 端的 Termux 也能装 adb 驱动,配 WiFi 调试后可以无线操作,但初学阶段还是先把有线调通,无线是基于有线完成的扩展。第二,Quest 2 这类 VR 设备的 adb 驱动是独立安装包,不要指望通用工具包能覆盖,遇到特殊设备先去官网找驱动,再回来用通用工具包。保持这份工具包纯净、不被各种第三方脚本污染,是我踩了三年坑后的最大教训,希望帮到你。
本文还有配套的精品资源,点击获取