ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

adb工具包完整指南:环境配置、真机调试与脚本封装

adb工具包完整指南:环境配置、真机调试与脚本封装 简介这是一份可以直接运行的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 把工具包放进 PATHWindows 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你只能干瞪眼弹窗截图。# 抓取全部日志输出到电脑文件CtrlC 结束 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是虚拟机管理命令和窗口管理器wmWindow 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], stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, textTrue, encodingutf-8, errorsreplace, # 避免个别日志编码异常导致进程崩溃 ) # 记录启动时间设置抓取总时长单位秒 start time.time() timeout 30 # 按行读取命中关键字即写入本地文件 with open(crash.log, w, encodingutf-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这段脚本的关键点有三个第一encodingutf-8配合errorsreplace避免某条日志用了非 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.dllWindows 下 adb 运行库必备AdbWinUsbApi.dllWindows 下 USB 驱动支持必备fastboot.exe刷机模式工具推荐保留source.properties版本元数据供工具识别保留NOTICE.txt开源协议声明保留我习惯在工具包根目录建一个README.md写上版本号和三个常用命令示例方便同事拿到手不提问就能用。解压后建议跑一遍adb version确认版本再插一台真机跑一遍adb devices确认环境就绪后把整个目录弄成压缩包存档标好日期和版本号。最后说两个维护习惯。第一Android 端的 Termux 也能装 adb 驱动配 WiFi 调试后可以无线操作但初学阶段还是先把有线调通无线是基于有线完成的扩展。第二Quest 2 这类 VR 设备的 adb 驱动是独立安装包不要指望通用工具包能覆盖遇到特殊设备先去官网找驱动再回来用通用工具包。保持这份工具包纯净、不被各种第三方脚本污染是我踩了三年坑后的最大教训希望帮到你。本文还有配套的精品资源点击获取
返回列表