尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ADB新手避坑指南:环境搭建、常用命令与调试实战

ADB新手避坑指南:环境搭建、常用命令与调试实战 一直以来ADB这三个字母在玩机圈里就没凉过。但很多人第一次听说它是在某个刷机教程、免root停用应用教程、或者是抓取App崩溃日志的帖子里。然后顺手一搜发现又是环境变量又是驱动还没开始就劝退了一半。这篇笔记是我把当年踩过的坑、花过的冤枉时间整理出来的一份新手总结。不扯原理长篇大论只讲怎么把这套工具跑起来、以及日常用得上、问得最多的那些命令和场景。无论你只是想给手机装个应用、精简一下系统、抓个崩溃日志还是打算做点自动化脚本这篇文章都能让你少走很多弯路。1. 先搞清楚ADB到底是什么为什么每个折腾手机的人都绕不开ADB全称Android Debug Bridge中文叫安卓调试桥。名字听着抽象但你可以把它理解成电脑和手机之间的一座桥或者说一条“专用通道”。从技术构成来看ADB不是单独一个东西而是由三部分组成电脑端的adb客户端、电脑后台运行的adb服务端server、手机里的守护进程adbd。你在电脑上敲下adb命令后客户端会把指令交给服务端服务端通过USB或者Wi-Fi与手机里的adbd通信adbd再在手机端执行具体操作并把结果返回。整个过程有点像一个信使负责把你在电脑上的每个指令翻译并传达到手机内部。为什么说它重要因为它绕过了手机上的UI层直接对接安卓底层的系统服务。你在手机上装的各种“手机管家”、“深度清理”类App能做到的事情ADB几乎都能做App做不了的、没有权限的操作ADB在授权后也能做。比如停用系统预装应用、绕过界面给App授予无障碍权限、直接查看系统运行状态这些都是常规App碰不到的领域。这篇笔记的内容覆盖面比较广从0到1的环境搭建到常用命令逐条讲解再到logcat抓日志、禁用应用、自动化点击、修改屏幕刷新率这类进阶操作最后还有一张高频报错排查表。新手不用从头到尾背命令找到自己需要的部分对照操作就行。已经有一定基础的朋友也可以看看第4、5部分那里有不少细节是日常使用中非常容易忽略的。2. 环境搭建把ADB跑起来总共分几步2.1 获取ADB工具包的几种方式先解决“用什么”的问题。网上流传最多的是一键安装包比如“15 seconds adb installer”解压后双击运行自动装驱动、配环境变量对不想折腾的人来说确实省事。但我更推荐去Android开发者官网下载官方“Platform Tools”工具包。这是谷歌官方的命令行工具集里面包含了adb、fastboot等核心程序版本更新及时兼容性也最稳。下载后解压到一个没有中文和空格的路径比如C:\adb。解压后你能看到adb.exe、AdbWinApi.dll、fastboot.exe这些文件。如果你只是临时用一次可以直接打开命令行cd到解压目录里执行adb命令不配环境变量也能工作。但只要你打算长期用强烈建议配一下环境变量否则每次都要先cd到那一长串路径里用几次就会烦。Windows配置环境变量步骤很简单按WinR输入sysdm.cpl回车打开“系统属性”窗口。点击“环境变量”。在“系统变量”里找到Path双击进入编辑页面。新建一行填上adb.exe所在的目录比如C:\adb。点确定保存然后重新打开一个命令行窗口。输入adb version如果能正常打印出版本号说明配置成功。2.2 手机端开启USB调试这步是绝大多数新手卡住的地方。开发者选项在系统设置里默认是隐藏的需要进入“设置-关于手机”连续点击“版本号”7次直到提示已进入开发者模式。不同品牌入口名称可能有细微差别vivo、OPPO、小米、华为这些主流品牌都差不多实在找不到就搜索“开发者选项”并点击跳转。进入“设置-开发者选项”后打开“USB调试”开关。这里有个细节小米、vivo等部分机型还需要在开发者选项里再打开“USB安装”和“USB调试安全设置”否则后续执行某些操作会提示权限不足。具体开关名称每个系统版本略有差异以自己手机上实际显示为准。2.3 用数据线连接电脑并验证用一根支持数据传输的数据线连接手机和电脑首次连接时在命令行执行adb devices手机上会弹出“是否允许USB调试”的窗口勾选“始终允许”然后点确认。正常情况下命令行会显示类似这样的输出List of devices attached XXXXXXX device那一长串字母数字是设备序列号后面跟的“device”表示连接正常可以继续操作了。如果显示的是“unauthorized”说明手机上的授权弹窗还没确认或没弹出来。如果显示“offline”多半是驱动问题或线材质量问题。注意尽量用原装数据线或质量好一点的第三方线。劣质线材只支持充电不支持数据传输会导致设备反复离线、识别不到这类问题最容易让人怀疑电脑或手机出了问题其实锅全在线材上。2.4 无线调试彻底摆脱数据线有数据线方案就一定有无线方案毕竟线插来拔去的体验确实很糟。Android 11及以上原生支持无线调试操作分几步手机连接Wi-Fi确保电脑和手机在同一个局域网里。用数据线连接电脑一次执行adb tcpip 5555让手机里的adbd开始监听5555端口。拔掉数据线执行adb connect 手机IP:5555比如adb connect 192.168.1.100:5555。看到“connected to 192.168.1.100:5555”就表示连上了。这个方法在做电视盒子调试、长时间跑自动化脚本时尤其好用。不过要注意设备重启后无线调试会失效需要重新用数据线连接并再次执行adb tcpip 5555。3. 核心命令实操从装机到日常维护3.1 设备连接确认与多设备管理前面提到adb devices是验证设备连接的起手式。如果电脑同时连着手机、模拟器等多台设备执行命令时就需要指定目标设备否则adb不知道该把指令发给谁。查看详细设备信息用adb devices -l对指定设备执行命令用-s参数接设备序列号。比如设备A的序列号是1234你想让设备A锁屏就执行adb -s 1234 shell input keyevent 26这样不会影响到其他连接的设备。同时挂了多台手机做批量测试时“-s 设备号”这个参数是使用频率最高的。3.2 使用adb shell进入手机内部adb shell是一条非常重要的命令执行后相当于在电脑终端里打开了手机的远程Linux环境。你可以把它理解成给手机开了一个后门终端在手机里执行各种底层命令。比如adb shell dumpsys battery adb shell wm size adb shell getprop ro.build.version.release分别是查看电池状态、屏幕分辨率、系统版本。这些都是只读命令不会对系统造成不可逆的影响新手可以放心尝试。有了adb shell很多操作不再依赖手机上的App。比如你想看看手机里到底装了哪些应用在shell里执行pm list packages就能列出来后面我们会具体展开。3.3 安装与卸载应用给手机装一个APK最直接的命令是adb install 路径\app.apk比如你在电脑桌面上有个微信安装包可以执行adb install C:\Users\用户名\Desktop\wechat.apk如果手机里已经装了同名应用需要覆盖安装时加上-r参数adb install -r app.apk有一点要提醒如果你安装的是开发测试包、或者包内带有testOnly标记安装时会报“INSTALL_FAILED_TEST_ONLY”。解决方法是在命令里加-tadb install -r -t app.apk卸载应用对应的是adb uninstall 包名这里很容易搞混输入的必须是包名而不是应用名称。比如卸载微信要写com.tencent.mm而不是“微信”。查包名的命令是adb shell pm list packages | findstr 微信Windows下用findstr过滤Linux或macOS下把findstr换成grep。pm是Package Manager的缩写这个命令家族非常强大。pm list packages可以列出所有已安装应用加-s只看系统应用加-3只看用户安装的第三方应用。过滤后再看包名你就知道哪些应用是“跑不掉”的预装软件了。3.4 文件传输push和pull怎么用往手机里传文件用push从手机往电脑拉文件用pull。方向一定要记清楚adb push 电脑文件路径 手机目标路径示例adb push C:\photo.jpg /sdcard/Download/adb pull 手机文件路径 电脑保存目录示例adb pull /sdcard/DCIM/Camera/ D:\pics这里补充一个背景知识/sdcard/是安卓的虚拟SD卡路径实际对应/data/media/目录普通用户有访问权限不需要root。但如果你想pull /data/data/某个应用目录下的文件在没root的设备上基本都会失败因为那块区域对普通用户是禁止访问的。3.5 截图与录屏记录证据、做演示都靠它截图命令有两种写法。最常见的是两步走adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png先截屏存到手机里再拉到电脑上。如果想一步到位可以用exec-out直接把图片数据输出到电脑并通过重定向保存为文件adb exec-out screencap -p screen.png这个方法少了一步速度更快。但有个细节需要注意在Windows命令行下重定向可能会改变换行符极少数情况下会导致图片打不开或损坏。如果遇到这种情况换用第一种两步方法或者用PowerShell执行即可。录屏的命令是adb shell screenrecord /sdcard/demo.mp4按CtrlC可以提前结束录制。默认最长录制180秒可以通过参数改变adb shell screenrecord --time-limit 10 /sdcard/demo.mp4这里–time-limit 10表示只录10秒。还可以用--size 1280x720指定分辨率--bit-rate 2000000指定码率。录屏在App测试、bug复现、演示操作流程时非常实用。3.6 重启与模拟按键这些命令看着基础用起来是真方便。重启手机adb reboot重启到bootloader刷机模式下常用adb reboot bootloader重启到恢复模式adb reboot recovery模拟按键操作常见的有几个adb shell input keyevent 26 adb shell input keyevent 3 adb shell input keyevent 4keyevent 26是电源键可以锁屏或点亮屏幕3是Home键4是返回键。模拟输入文字用adb shell input text “hello”实测英文和数字没问题但中文输入很容易出现编码问题尽量少用。4. 进阶场景解决那些“折腾党”最关心的事4.1 用logcat抓取日志定位应用崩溃开发调试或排查App闪退时logcat是绕不开的工具。直接执行adb logcat会输出当前所有日志信息量非常大。日常使用可以加过滤参数adb logcat -s AndroidRuntime-s AndroidRuntime表示只显示TAG为AndroidRuntime的日志也就是崩溃信息的主要来源。还可以用adb logcat -v time让每条日志带上时间戳方便按时间线定位问题。我个人的调试习惯是三步走adb logcat -c先清空旧日志。在手机上复现问题让崩溃日志重新打印。执行adb logcat -d crash.log把当前已有日志输出到文件。然后把crash.log拉到电脑上用文本编辑器搜索“FATAL EXCEPTION”或“NullPointerException”之类的关键词基本就能快速定位到异常位置。4.2 修改屏幕刷新率有些手机系统默认锁了屏幕刷新率硬件虽然支持高刷但设置里没有显式开关。通过ADB修改系统设置可以强制系统在某个刷新率下运行。命令是adb shell settings put system peak_refresh_rate 120 adb shell settings put system min_refresh_rate 120这两个命令的作用是同时指定峰值刷新率和最低刷新率两行配合使用才稳定。部分骁龙机型确实能通过这种方式解锁高刷显示选项。查看当前刷新率用adb shell dumpsys display | findstr refreshRateWindows下用findstrLinux或macOS把findstr换成grep即可。想调回60Hz把120改成60再执行一遍就行。需要说明的是不同品牌定制系统的设置键名可能不同如果你在部分机型上执行后没效果说明厂商用的不是这套键名不要反复尝试直接去系统设置或社区找对应方案。4.3 禁用应用与禁止应用联网很多人搜“ADB精简列表”、“怎么冻结应用”其实底层用的都是pm disable-user这个命令adb shell pm disable-user --user 0 包名这个命令可以把某个应用停用效果接近卸载但比卸载更温和因为它不会删除应用的数据文件随时可以恢复。如果要恢复执行adb shell pm enable 包名以停用某个预装应用为例执行后桌面上的图标会消失应用也不再有后台进程。需要澄清一点很多人把“禁用应用”和“禁止应用联网”混为一谈。其实pm disable-user是停用整个应用不是给它断网。如果希望应用还能正常打开、但没法访问网络在非root设备上ADB单靠pm命令做不到。要实现单应用断网要么用系统自带的“应用联网控制”功能要么借助第三方防火墙类工具。所以看到“adb禁止应用联网”这种热搜时你要分清对方的需求到底是“停用”还是“断网”两者的实现方式完全不同。关于精简预装应用我的建议是动手之前先用adb shell pm list packages -s把系统应用列表备份一份到文本文件然后每次禁用后都要确认系统是否正常。尤其是桌面Launcher、系统设置、输入法这类核心组件一旦误禁可能导致桌面崩溃或无法输入非常麻烦。好在有adb shell pm enable这个恢复命令能救回来。4.4 通过ADB授予无障碍权限为什么单独讲这个因为很多自动化工具、辅助功能类App在主界面会要求用户手动去系统设置里开启无障碍服务。但手动找设置项比较深对普通用户不友好。ADB可以直接写入系统设置跳过这个繁琐步骤adb shell settings put secure enabled_accessibility_services 包名/服务类名 adb shell settings put secure accessibility_enabled 1第一行把无障碍服务写入启用列表第二行整体开启无障碍功能开关。这里的难点是“服务类名”要写对。它不是一个普通的包名而是应用内部声明的Service完整路径。怎么查最直接的办法是先手动在系统设置里打开一次该应用的无障碍服务然后执行adb shell settings get secure enabled_accessibility_services把输出内容记录下来下次在自动化脚本中直接写入这个字符串即可。4.5 “自动打卡”类操作到底是怎么实现的网上搜“adb 企业微信 自动打卡”这类需求本质上是ADB模拟点击命令的组合。ADB可以模拟屏幕点击、滑动和输入操作adb shell input tap x y adb shell input swipe x1 y1 x2 y2x和y是屏幕坐标。要获取按钮的坐标位置可以先截图再在电脑上看adb exec-out screencap -p screen.png打开图片找到目标按钮的像素位置把这个坐标写进脚本再用系统定时任务或电脑任务计划程序定时触发adb命令就能实现“到点自动点击”的效果。需要说明的是这种自动化脚本用在App测试、回归验证上是靠谱的但用在特定工作场景时是否符合相关规定需要你自己去判断这里只讲技术原理不探讨具体使用边界。毕竟工具的用途是什么、用在哪里最终是做决定的人自己的责任。4.6 为什么有人会搜“/data/adb/modules”这类路径这是个很容易让人犯迷糊的现象。ADB调试工具的命令行程序叫adb但Android系统中还有一个目录恰好叫/data/adb/两者没有任何关系纯属名字撞车。/data/adb/这个目录存在于已root的设备上是Magisk框架的工作目录。其中modules目录存放已启用的模块modules_update目录存放待更新的模块。当你安装了某个Magisk模块后模块文件就会被释放到这个目录下。普通用户没有root权限时执行ls /data/adb会直接报权限不足。我不展开讲模块的具体内容但有一点必须提醒往这个目录里写东西、替换文件、改权限都属于修改系统分区的操作风险较高。如果没有明确目的不建议新手去动这块区域。刷机一时爽救砖两行泪这句老话永远有效。4.7 电视盒子和模拟器ADB的另类天地智能电视、电视盒子的调试逻辑和手机几乎一模一样。老款创维等电视想要打开ADB通常在“设置-关于本机”里连续点击版本号进入开发者模式有的则需要进入工厂菜单开启ADB开关。不同批次固件的入口差异很大网上有不少对应型号的教程按机型搜索即可。“电视永久打开ADB”这个说法其实不太准确电视系统的ADB开关一般不会自己关闭最多是部分机型重启后需要重新打开通常属于设置没保存好或固件限制。调试电视盒子的场景下无线连接比手机更舒服因为不需要天天抱着电视插线adb connect 电视IP:5555模拟器也是同理。夜神模拟器等安卓模拟器本身就是跑在电脑上的一个完整安卓系统ADB连接方式与真机基本一致只是连接地址不同。夜神模拟器的adb端口不是默认的5555而是62001连接命令类似adb connect 127.0.0.1:62001。不同模拟器端口不同具体端口要以模拟器版本为准。4.8 解决手机连不上电脑和“unauthorized”报错前面在第2.3节提过unauthorized这里展开讲一下排查思路。第一次连接时电脑会弹窗询问是否允许USB调试。如果点了拒绝或者弹窗根本没出现命令行就会一直显示unauthorized。处理方式按顺序来拔掉数据线重新插一次此时手机大概率会重新弹窗。如果没弹窗在开发者选项里把“USB调试”关掉再打开。然后执行adb devices确认状态。如果仍然不动可以执行adb kill-server再adb devices重启一遍ADB服务端试试。驱动问题也是“找不到设备”的高发原因尤其老旧Windows系统对ADB驱动的自动识别很差。解决办法是去手机品牌官网下载对应USB驱动或者设备管理器里手动更新驱动。Win10以上的系统兼容性好了很多但遇到国产定制系统还是有概率需要手动装驱动。5. 高频报错与排查实录一张表帮你快速定位为了让你在遇到问题时不用到处翻帖子我把新手阶段最常见的坑整理成一张速查表报错或现象常见原因解决思路adb devices显示unauthorized手机上未确认授权弹窗重插数据线手机弹窗点“始终允许”设备显示offline驱动不匹配或线材只支持充电重装厂商USB驱动或更换数据线找不到设备no devices未开启USB调试或驱动异常检查开发者选项重装ADB驱动执行adb提示不是内部或外部命令环境变量未配置重新配置Path或cd到adb.exe所在目录安装APK报INSTALL_FAILED_TEST_ONLY安装包带testOnly标记加-t参数重装pm disable-user报错权限不足或包名写错确认包名正确普通应用再停用无线调试连接不成功设备重启后adbd未监听端口重新数据线连接并执行adb tcpip 5555pull /data/data下文件失败非root设备无权限使用App导出目录或root后再操作图像打不开或损坏Windows重定向换行符问题改用两步截图法或PowerShell这张表里再强调两个点。unauthorized是最常见、但也最好解决的问题。每次遇到先看手机屏幕有没有弹窗有就点允许没有就重插数据线并在开发者选项里关闭再重新打开USB调试。顺序别搞反很多人反复敲adb devices敲了半小时问题根本不在命令上。驱动问题则要记住一个原则官方驱动永远优先。手机官网、电脑品牌官网都能找到对应驱动下载比第三方的万能驱动助手稳妥得多。6. 从会用到好用我的几条实操心得与建议文章最后聊几点这些年用ADB摸索出来的感受。第一命令本身不难难在搞清楚边界。pm disable-user能停用的只有你有权限访问的应用不是随便一个包名都能禁adb shell也不是万能钥匙没有root权限时/data目录里的内容你碰都碰不了。我见过很多人因为没搞清权限边界把系统组件禁了、把系统文件改了最后只能刷机恢复。所以动手之前先想想这一步操作是不是在你的权限范围内。第二建立自己的操作记录习惯。尤其是精简系统时每禁用一个应用就顺手记下包名方法可以用txt文件或在命令窗口里留底。万一出现问题第一时间就能用adb shell pm enable 包名恢复不用满屏找命令记录。我当年就因为没记录误禁了系统相机还以为是系统坏了白白折腾了一晚上。第三批量操作用脚本能省很多时间。Windows下你可以把多条adb命令写进一个bat文件双击就能顺序执行。比如给多台测试机批量安装应用echo off adb install -r app1.apk adb install -r app2.apk echo 安装完成 pause更进一步可以用Python的subprocess模块调用adb命令配合uiautomator抓取控件坐标就能写出一套有真实价值的自动化测试工具。平时维护一只小脚本比每次手工敲命令高效得多。第四现阶段对大多数只想管理自己手机的人来说重点掌握adb devices、adb install、adb uninstall、adb push、adb pull、adb shell这几条基础命令就够用了。剩下的命令非常庞大包括各种dumpsys参数、settings配置项遇到具体需求再针对性查文档完全来得及。工具是拿来解决问题的不是拿来背单词的把有限的时间花在实际需求上才是这套工具最正确的打开方式。
返回列表