
快速搞懂adb下载、安装、环境配置与高频用法全记录做安卓开发、玩机调试、或者纯粹想研究手机里那些隐藏功能的人应该都绕不开adb这个名字。它的全称是Android Debug Bridge翻译过来就是安卓调试桥。名字听着挺玄乎实际上它就是电脑和手机之间的一座通信管道你在这头敲命令那头手机就按指令干活比如装应用、传文件、抓日志、调系统设置甚至给应用授权。很多所谓的“玩机黑科技”拆开来看底层都是在用adb命令。这篇博客不整虚的我把从零开始下载adb、装驱动、配环境变量、连接手机、再到日常高频使用的命令全部拆开来讲顺便把我自己踩过的坑和排查思路一并写出来。不管你是刚接触adb的新手还是想查漏补缺的老玩家按着这篇顺序走一遍基本就能把adb玩明白了。1. 下载与安装先让电脑“认识”adb很多人卡在第一步以为是下载一个软件装上就完事其实adb不是一个双击安装的图形化软件它本质上是一个命令行工具集。你需要拿到官方工具包然后在电脑上把它配置好让它能随时被调用。1.1 从哪下载最靠谱这里给两个渠道一个是最权威的一个是备用的。第一个渠道是Android开发者官方网站。谷歌官方会随Android SDK一起发布Platform Toolsadb就在这里面。这个工具包更新很勤快新手机、新系统出来之后旧版adb偶尔会不识别设备更新到最新版通常就能解决。下载页面找“SDK Platform Tools”就行它会根据你的操作系统自动推荐相应版本Windows用户选zip包Mac和Linux用户选对应的tar.gz包。第二个渠道是国内的安卓社区或镜像站。比如一些高校镜像、第三方开发者站点会同步官方Platform Tools。这个渠道的好处是下载速度快不用访问外网。但要注意只从可信度高的站点下载下载完最好比对一下文件哈希值防止别人动过手脚。我平时用的还是官方源图个放心。下载完你拿到的是一个压缩包里面是一组exe和dll文件。注意压缩包里的东西直接就能用不需要什么安装向导。我自己习惯把它解压到一个固定位置比如Windows下的D:\platform-tools或者Mac下的~/platform-tools然后把路径记好后面配置环境变量会用到。1.2 Windows下的驱动问题把adb解压出来之后你插上手机执行adb devices有可能会发现设备列表空空的或者显示一个“设备无法识别”。这个情况大概率是驱动没装好尤其是Windows系统。怎么判断是驱动问题右键“此电脑”选“管理”进“设备管理器”看“其他设备”或“便携设备”里有没有带黄色感叹号的项。如果有展开后能看到类似“ADB Interface”或“Android Composite ADB Interface”之类的名字右键选“更新驱动程序”手动指定到你的platform-tools文件夹让系统在里面找驱动。如果还不行就去你的手机品牌官网下载对应USB驱动品牌机一般都有专门的驱动包。有个小技巧现在很多手机默认的USB连接方式是“仅充电”这种状态下电脑很难识别设备。连接后下拉通知栏把USB模式改成“文件传输MTP”或直接选“传输文件”很多识别问题就没了。注意驱动装完后最好重启一下电脑。我做测试的时候经常发现驱动装完不重启adb有时候就是死活不认设备重启后立刻就好。1.3 配置环境变量告别每次输完整路径拿到platform-tools后如果你不想每次输命令都先打一长串完整路径比如D:\platform-tools\adb.exe devices那就要配置环境变量。把platform-tools目录加到系统的PATH里之后在任何目录下打开终端直接敲adb就能用了。Windows配置路径是右键“此电脑”“属性”“高级系统设置”“环境变量”。在“系统变量”里找到Path这一项双击它点“新建”把platform-tools的完整路径粘贴进去。Mac和Linux用户则是在~/.bash_profile或~/.zshrc里加一行export PATH$PATH:~/platform-tools然后source一下。配置完验证一下。重新打开一个终端窗口注意是新的窗口旧窗口里环境变量不会刷新输入adb version如果能正常打印出版本号说明配置成功。2. 连接设备让电脑和手机建立通信工具备好了接下来就是让电脑和手机连上。这里面也有不少细节很多新手折腾半天连不上基本都是卡在这些地方。2.1 开启开发者选项和USB调试这是必须的一步也是所有adb操作的前提。打开手机“设置”找到“关于手机”连续点击“版本号”七次直到提示“您已进入开发者模式”。然后返回设置主菜单就能看到“开发者选项”了。进去之后打开“USB调试”开关。不同厂商的入口稍微有点差别但大方向一致。小米、红米手机需要额外在“开发者选项”里打开“USB调试安全设置”否则部分模拟点击、授权类的命令会被拦截。华为、荣耀手机则要注意那个“仅充电模式下允许ADB调试”的选项顺手打开最好。提示安全设置这类开关请按需开启用完建议关闭。尤其是借来的测试机不要随意开启高权限调试选项。2.2 首次连接与授权弹窗处理用数据线把手机插到电脑上终端里执行adb devices正常情况下第一次执行手机会弹出一个“允许USB调试吗”的对话框勾选“始终允许使用这台计算机进行调试”点确定。然后终端里就会列出你的设备编号后面标注device这就是连接成功。如果列表里什么都没有或者显示unauthorized说明授权没完成。解决思路是拔掉数据线重插重新执行adb devices手机屏上注意看弹窗及时点允许。若多次不弹窗可以执行adb kill-server然后adb start-server把adb服务重启一次再连。2.3 无线连接摆脱数据线束缚大家基本都用数据线连接。不过调试到一半想走动走动或者手机接口接触不良就可以试试无线连接。前提是电脑和手机处于同一个局域网。先用数据线连接手机执行adb tcpip 5555然后拔掉数据线找到手机的IP地址设置关于手机状态信息里能看接着执行adb connect 192.168.x.x:5555看到connected to 192.168.x.x:5555就说明连上了。无线连接偶尔会断重新adb connect一次即可。我自己的经验是无线连接适合短时操作长时间的大文件传输不如数据线稳。2.4 多设备管理电脑上同时连着好几台手机时adb devices会列出所有设备。如果想指定操作某一台命令后面加-s参数指定序列号adb -s 设备的序列号 shell这个在批量测试、多台设备同时调试时很实用不然adb会报错说“有多个设备”。3. 日常高频命令覆盖应用、文件与系统设置adb命令非常多但我平时实际用到的高频命令其实就那么几十条这里挑最核心、最容易踩坑的展开讲。3.1 安装与卸载应用安装应用是最高频的操作之一。命令格式adb install 应用包路径.apk这个命令会保留应用数据做覆盖安装。如果你想先卸载再全新安装或者忽略版本号直接降级安装可以用adb install -r 应用包路径.apk # 保留数据覆盖安装 adb install -d 应用包路径.apk # 允许降级安装 adb install -g 应用包路径.apk # 安装时直接授予所有运行时权限卸载命令也很简单adb uninstall 包名 adb uninstall -k 包名 # 卸载但保留数据和缓存目录这里说一个坑很多小白不知道“包名”是什么。包名是应用的唯一标识比如微信的包名是com.tencent.mm淘宝是com.taobao.taobao。想查看某个应用包名可以在已连接状态下执行adb shell pm list packages后面如果跟一个关键词过滤比如adb shell pm list packages | grep tencent就能列出腾讯相关的所有应用。3.2 文件传输手机和电脑互传传文件也是高频操作。电脑往手机里推adb push 电脑本地文件路径 /sdcard/Download/手机往电脑里拉adb pull /sdcard/Download/某个文件 电脑保存路径路径上有一个坑安卓的存储路径不是固定的不同机型差异很大。有的手机/sdcard/就是内置存储有的手机把内置存储挂载在/storage/emulated/0/。最稳妥的办法是先用adb shell进入手机终端然后执行ls看看有哪些目录或者执行echo $HOME看当前用户主目录在哪。不要想当然地写死路径。3.3 截图与录屏这个功能非常实用不需要手机root也不用装任何App就能直接把手机屏幕截下来再拉回电脑。adb exec-out screencap -p 截图保存路径.png录屏命令adb shell screenrecord /sdcard/Download/录屏.mp4录屏结束后按CtrlC终止录制再用adb pull把文件拉回电脑。注意录屏默认有180秒时长限制超时会自动停止需要更长时可以在命令后加--time-limit 300单位秒来设置。3.4 设置屏幕刷新率系统级别的刷新率很多机型因为省电策略在特定场景下会自动降到60Hz。但有些用户就想强制全局保持高刷用adb就能实现adb shell settings put system peak_refresh_rate 120 adb shell settings put system min_refresh_rate 120不同厂商的参数名略有不同有的机型用的是user_refresh_rate有的用hw_refresh_rate。不确定的时候先执行adb shell settings list system | grep refresh查看一下现有配置项。修改完想恢复默认执行adb shell settings delete system peak_refresh_rate adb shell settings delete system min_refresh_rate注意这个操作只能修改系统设置项不是改内核驱动。如果你的屏幕硬件本身只有90Hz写120也不会生效手机最高刷新率由屏幕面板决定。3.5 禁止应用联网这个需求在国产机里很常见比如不想让某个App在后台偷跑流量。系统自带的应用管理里能设置但有些机型入口藏得深或者直接没有这个选项。这个时候可以用adb来操作。传统思路是使用iptables防火墙规则限制某个应用的所有网络请求但这个方法在部分新机型上会因为权限限制而失败而且需要反复调试。更常用的方式是结合appops命令adb shell appops set 包名 RUN_IN_BACKGROUND deny这个命令可以禁止应用在后台运行从根源上减少后台联网。如果是要禁止应用使用数据流量或Wi-Fi联网需要根据系统原生机型测试可用参数部分系统并不完整支持请以实际生效结果为准。准确说安卓的联网控制底层实现比较复杂。不同系统版本上appops里的联网相关项名称不一致有的叫INTERNET有的叫RUN_ANY_IN_BACKGROUND。想稳妥一点还是在系统自带的“应用管理”里操作或使用手机厂商的管家类App。adb能做的是帮你精确定位到包的完整状态以及快速重置所有权限。3.6 授予无障碍权限很多自动化脚本、打卡软件、以及“刘海屏适配”工具都需要打开无障碍服务。手动去设置里翻找很麻烦尤其要给多台设备批量配置时用adb一条命令搞定adb shell settings put secure enabled_accessibility_services 包名/无障碍服务类名这里的“无障碍服务类名”是什么需要先知道每个应用的无障碍类全路径名称。可以执行adb shell dumpsys accessibility在输出里搜索应用名找到对应服务类名。然后执行adb shell settings put secure enabled_accessibility_services 应用包名/服务类全路径 adb shell settings put secure accessibility_enabled 1这样无障碍服务就被打开了。我自己批量设置测试机的时候就是靠这两条命令完成自动化省去手动点击的重复劳动。4. 日志与系统状态查看调试问题的利器应用闪退、卡顿、网络异常这些时候日志排查是必须的。adb logcat是安卓调试中使用频率极高的命令很多网上求助帖里的系统日志就是通过它导出的。4.1 logcat抓取日志最简单的抓取方式adb logcat执行后终端会实时滚屏输出系统日志刷得飞快。大多数情况下你需要的是按条件过滤。比如只查看某个应用的日志adb logcat --pid$(adb shell pidof 包名)这个命令先获取应用进程ID再只输出该进程相关的日志比一股脑全量输出清爽很多。如果是排查崩溃问题最好把日志保存到本地文件adb logcat -v time 日志文件路径.log-v time参数会在每条日志前加上时间戳方便定位崩溃发生的具体时间点。然后按CtrlC停止。抓取日志时有一个小细节安卓系统日志缓冲区是环形结构旧的日志会被新的冲掉。如果崩溃发生在很久之前直接抓可能已经看不到关键线索。此时可以先把系统日志缓冲“清空”再复现问题。操作方法分两步先执行adb logcat -c这个命令会清空当前所有日志缓存。然后再执行adb logcat去复现应用崩溃的操作流程这样抓到的日志里就只包含崩溃前后的完整信息排查效率非常高。4.2 dumpsys查看系统内部状态dumpsys是一个很大的话题它能读取系统所有服务的信息。比较常用的几个是查看电池状态adb shell dumpsys battery输出里能看到电量等级、电压、温度、充电状态等信息。如果需要临时模拟电池状态比如测试低电量下App的表现可以用adb shell dumpsys battery set level 5把电量强制设置成5%。测试完记得恢复adb shell dumpsys battery reset查看当前界面和Activity信息adb shell dumpsys window | grep mCurrentFocus这个一般用来快速确认当前停留在哪个应用页面。查看CPU与内存占用adb shell dumpsys cpuinfo adb shell dumpsys meminfo 包名调试性能问题的时候这两条命令非常有用能一眼看出哪个进程在吃资源。4.3 模拟用户操作有时候做自动化测试或者远程帮人调试可以用命令模拟点击和滑动。模拟点击屏幕上的坐标点adb shell input tap x y模拟滑动adb shell input swipe x1 y1 x2 y2 持续时间毫秒模拟输入文字adb shell input text 你要输入的文本这种方式输入的文本只支持英文字符和数字中文会乱码。需要输入中文时可以用adb shell am broadcast的方式配合输入法App来实现但配置相对复杂日常使用中我更多还是用adb shell input做简单自动化。怎么确定坐标点先在手机上打开“开发者选项”里的“指针位置”屏幕上会实时显示手指点按处的坐标。记下坐标后再去电脑上执行相应命令。5. 常见问题排查与避坑指南实操下来adb会遇到的问题基本就那几类这里整理了一份排查速查表都是我踩过坑之后总结出来的。问题现象可能原因解决方法adb devices看不到设备USB模式不对或驱动问题检查USB连接模式改为文件传输查看设备管理器更新ADB驱动设备状态显示unauthorized手机未授权电脑调试拔线重插注意手机弹窗点击允许或执行adb kill-server重启adb服务后重试adb: command not found环境变量未配置或终端未刷新重新配置PATH开启新终端窗口重试adb install报INSTALL_FAILED_UPDATE_INCOMPATIBLE已安装的版本签名不同先卸载旧应用再重新安装连接手机后频繁断开数据线质量差或接口松动换一条原装或高规格数据线避免使用延长线无线连接一直失败手机和电脑不在同一网段确认连的是同一个Wi-Fi或检查AP隔离设置adb shell命令提示Permission denied部分系统命令需要更高权限确认手机已解锁OEM或使用adb root仅适用于已root设备截图保存到电脑是0字节exec-out命令被中断改用adb shell screencap /sdcard/screen.png再adb pulllogcat日志刷新过快找不到关键信息日志缓冲太多旧内容先adb logcat -c清空再复现问题抓取日志关于系统精简与冻结操作的额外提醒玩机圈里经常能看到类似“vivo adb精简列表”“红米K70用adb冻结”之类的词。所谓精简本质是用adb禁用或卸载系统内置应用。常见命令是adb shell pm disable-user --user 0 包名这个命令可以将系统应用从当前用户下禁用相当于“冻结”而不是删除之后想恢复再执行adb shell pm enable 包名。这个命令本身没有危险危险的在于对系统应用动手之前你根本不知道它被禁用后会导致什么连锁反应。我曾经在一个测试机上禁用了一个看着没什么用的系统UI组件结果整个手势导航失效进设置都难。而且部分深度精简操作需要解锁system分区技术门槛和风险都会成倍增加。所以我给的建议是动手前先备份当前应用列表记录哪些应用被改动过方便回溯。只冻结自己明确知道用途的应用不确定的坚决不动。不要同时禁用多个应用一次只改一个出问题了好定位。大多数“系统内置”应用禁用了会影响核心功能特别是厂商账号体系、系统更新服务、以及基础界面组件。系统的出厂设置自有它的设计逻辑过度精简往往会以牺牲系统的稳定性和功能完整性为代价。如果你真的觉得某款预装应用碍眼系统设置里一般都有“停用”选项能用系统原生方案解决的就没必要动用adb。写在最后adb这个东西刚开始接触会觉得命令又多又杂但用顺手之后你会慢慢发现它其实是一个效率工具。安装App、传文件、抓日志、调系统设置日常折腾手机能遇到的大部分需求adb都能覆盖。尤其对于经常做安卓开发、设备测试或者玩机调试的人来说熟练掌握adb几乎是必备技能。我个人实际操作中的体会是遇到问题先别急着查什么“高级玩法”优先把基础命令吃透尤其是adb devices、adb install、adb logcat、adb pull/push这几个它们能解决80%的日常需求。另外养成好习惯下载adb工具包时认准官方渠道动手改系统设置前先记下原始值这些细节能在关键时候帮你省下大量时间。