Mac 手动安装 ADB 教程:绕过 Homebrew 配置环境变量

Mac 手动安装 ADB 教程:绕过 Homebrew 配置环境变量 1. 为什么还要折腾 Homebrew 之外的 ADB 安装方式1.1 从一次真实的翻车现场说起先说个我上周遇到的真实情况。同事新入职领了一台 M2 芯片的 MacBook Pro第一件事就是装 ADB 准备调试安卓设备。他照着网上搜到的教程敲了brew install android-platform-tools结果卡在Updating Homebrew...整整二十分钟没动静最后报了个Failed to connect to raw.githubusercontent.com port 443的错误。他换了手机热点、重启了终端、甚至重装了 Homebrew折腾一下午还是没搞定。这个场景我相信很多人都遇到过。Homebrew 确实是 Mac 上最主流的包管理器装 ADB 一条命令就能搞定但它有个前提——你得先有一个能正常工作的 Homebrew而且网络环境得配合。现实情况是Homebrew 的安装和更新本身就经常出问题尤其是国内网络环境下brew update卡住、brew install超时几乎是家常便饭。更别说有些公司的电脑有安全策略限制根本不允许你随便装包管理器。所以这篇文章想聊的核心问题是当 Homebrew 用不了、不好用、或者你压根不想用它的时候Mac 上还有哪些靠谱的方式能把 ADB 装起来并配好环境变量我会把几种主流方案都拆开讲清楚包括手动下载官方工具包、通过 Android Studio 附带安装、用 SDK Manager 单独拉取以及最容易被忽略的环境变量配置细节。每一种方法我都会说明适用场景、具体步骤、以及我自己踩过的坑。这篇文章适合谁看如果你是刚接触安卓调试的新手或者你已经被 Homebrew 的各种网络问题折磨过又或者你需要在一台受限的办公电脑上快速把 ADB 跑起来那下面的内容应该能帮你省下不少时间。我不打算只给你一条命令就完事而是把背后的逻辑和避坑点都讲透让你下次遇到类似问题能自己判断该怎么选。1.2 ADB 到底是什么为什么 Mac 上装它这么麻烦在展开具体方法之前有必要先把 ADB 这个东西说清楚不然后面讲路径配置的时候容易懵。ADB 全称 Android Debug Bridge翻译过来叫“安卓调试桥”。你可以把它理解成一座连接电脑和安卓设备之间的桥。这座桥是双向的你可以在电脑上敲命令让手机执行操作比如安装应用、抓取日志、截屏、模拟点击手机也可以把它的运行状态回传给电脑。做安卓开发、测试、逆向分析、甚至只是想把手机里某个应用的数据导出来都离不开它。ADB 本身不是一个单独的可执行文件它是一组工具的集合。你下载完官方工具包解压后会看到目录里有adb、fastboot、aapt、etc1tool等好几个文件。其中adb是我们最常用的fastboot用于刷机和进入引导模式aapt用来解析 APK 包信息。这些工具都是命令行程序没有图形界面所以你必须通过终端来调用它们。那为什么在 Mac 上装 ADB 会麻烦呢核心原因有三个。第一Mac 系统本身不自带 ADB。Windows 用户有时候装个手机助手就顺带把 ADB 装上了但 macOS 没有这种“顺带”的渠道你得自己动手。第二ADB 是命令行工具必须配置环境变量才能在任意目录下调用。如果你只是把adb文件放在某个文件夹里那每次用的时候都得先cd到那个目录或者输入完整路径非常反人类。环境变量PATH的作用就是告诉系统“去这些目录里找可执行文件”配好之后你在任何位置敲adb都能直接运行。第三Homebrew 虽然是首选但它依赖网络和包管理生态。Homebrew 安装 ADB 的本质是从远程仓库下载android-platform-tools这个 formula然后解压到/opt/homebrewApple Silicon或/usr/localIntel目录下再自动帮你做好软链接。整个过程依赖网络通畅一旦下载环节出问题你就卡住了。理解了这三点你就能明白为什么“手动安装”这件事值得单独拿出来讲——它绕开了包管理器和网络依赖把控制权完全交到你手里。1.3 几种安装方式的横向对比在正式进入操作之前我先用一张表把几种方式的核心差异列出来方便你根据自己的情况快速选择。安装方式适用场景优点缺点难度Homebrew网络正常、已装 Homebrew一条命令、自动配环境变量、易更新依赖网络、Homebrew 本身可能出问题低手动下载官方包网络受限、不想装包管理器完全离线可控、版本明确需手动配环境变量、更新麻烦中Android Studio 附带已装或打算装 Android Studio顺带就有、版本匹配体积大、启动慢低SDK Manager 单独拉取需要多版本管理可管理多个 SDK 版本需先有 SDK 工具、步骤多中高这张表不是让你死记而是帮你建立一个判断框架。接下来我会逐个展开把每一步都讲到位。2. 手动下载官方工具包最可控的安装方式2.1 去哪里下载下载哪个版本手动安装的第一步是拿到官方工具包。这里有个关键点一定要从官方渠道下载不要随便在第三方网站下因为 ADB 工具包里有可执行文件来源不明的包存在安全风险。官方下载地址是 Google 的 Android 开发者网站搜索“Android SDK Platform-Tools”就能找到。页面会根据你的操作系统自动推荐对应版本。Mac 用户要注意区分芯片类型Intel 芯片和 Apple SiliconM 系列芯片下载的是不同的包。虽然理论上 Intel 版本在 M 系列上可以通过 Rosetta 转译运行但既然有原生版本就没必要绕这个弯。下载下来是一个 zip 压缩包文件名类似platform-tools-latest-darwin.zip。这里的darwin就是 macOS 的系统代号看到这个词就说明下对了。提示如果你在公司网络下访问官方下载页有困难可以尝试在个人设备上下载后通过合规方式传输或者使用 Android Studio 自带的 SDK Manager 来获取具体见后面章节。2.2 解压到哪个目录最合适下载完成后双击解压你会得到一个名为platform-tools的文件夹。接下来的问题是这个文件夹放哪里我的建议是放在用户主目录下的一个固定位置比如/Users/你的用户名/Library/Android/sdk/platform-tools或者简单点直接放/Users/你的用户名/platform-tools。为什么不建议放桌面或下载文件夹因为这两个地方你迟早会清理一旦移动或删除环境变量就失效了到时候adb命令报command not found你还得重新排查。如果你打算长期做安卓开发我更推荐建立一个统一的 SDK 目录结构比如/Users/你的用户名/Library/Android/sdk/ ├── platform-tools/ ├── build-tools/ ├── emulator/ └── ...这样所有安卓相关的工具都集中在一处管理起来清晰。Library目录在 Finder 里默认是隐藏的你可以按Command Shift .切换显示隐藏文件或者在终端里直接用mkdir -p创建。创建目录并移动文件夹的命令大概是这样mkdir -p ~/Library/Android/sdk mv ~/Downloads/platform-tools ~/Library/Android/sdk/执行完可以用ls ~/Library/Android/sdk/platform-tools确认一下里面应该有adb、fastboot等文件。2.3 环境变量配置的三种写法与选择这是整个手动安装里最关键、也最容易出错的一步。环境变量配置的核心目的只有一个让你在任何目录下敲adb都能被系统找到。Mac 上配置环境变量有几个不同的文件可以选择很多人在这里犯迷糊我先把它们的关系理清楚。macOS 从 Catalina 版本开始默认使用 zsh 作为 shell所以你的配置文件是~/.zshrc。如果你还在用 bash那对应的是~/.bash_profile。这两个文件在用户主目录下是隐藏文件。你可以用open -e ~/.zshrc直接用文本编辑器打开或者用nano ~/.zshrc在终端里编辑。配置的写法有三种常见形式我分别说明。第一种直接追加 PATHexport PATH$PATH:~/Library/Android/sdk/platform-tools这种写法最简单把新目录追加到原有 PATH 的末尾。缺点是如果 PATH 里已经有其他版本的 adb系统会优先用前面的那个。第二种前置 PATHexport PATH~/Library/Android/sdk/platform-tools:$PATH把新目录放在最前面优先级最高。当你系统里存在多个 adb 版本时这种写法能确保用的是你指定的这个。我个人更推荐这种。第三种先定义变量再引用export ANDROID_HOME~/Library/Android/sdk export PATH$PATH:$ANDROID_HOME/platform-tools这种写法多定义了一个ANDROID_HOME变量很多安卓开发工具比如 Gradle、Flutter会读取这个变量来定位 SDK。如果你只是用 ADB 调试前两种就够了如果你要做完整开发建议用第三种。注意~符号在 PATH 配置里能否正确展开取决于 shell 的解析。为了保险你可以写成完整的绝对路径比如/Users/你的用户名/Library/Android/sdk/platform-tools避免因为波浪号解析问题导致配置失效。2.4 让配置立即生效并验证改完配置文件后新开的终端窗口会自动加载但当前已经打开的窗口不会。你需要手动让它生效source ~/.zshrc然后验证是否配置成功which adb adb versionwhich adb应该输出你配置的那个路径adb version应该打印出版本号和修订号。如果which adb没有任何输出说明 PATH 没配好如果输出了路径但adb version报错可能是文件权限问题可以用chmod x给 adb 文件加上执行权限。这里有个我踩过的坑要提醒如果你之前用 Homebrew 装过 ADB后来又手动装了一个系统里就会存在两个 adb。这时候which adb的结果取决于 PATH 的顺序。排查版本冲突时先用which -a adb列出所有找到的 adb 路径再决定保留哪个、删掉哪个。3. 借助 Android Studio 和 SDK Manager 安装3.1 Android Studio 顺带安装的便利与代价如果你本来就要做安卓开发那装 Android Studio 是最省事的路子。安装过程中它会引导你下载 SDK其中就包含 platform-tools。装完之后ADB 通常位于~/Library/Android/sdk/platform-tools/目录下你只需要把这个目录加进 PATH 就行配置方法和上一章完全一样。但这里有个很多人不知道的细节Android Studio 默认不会自动帮你把 platform-tools 加进 PATH。它只是把文件下载到那个目录环境变量还是得你自己配。所以经常有人装完 Android Studio在终端里敲adb还是提示找不到命令原因就在这里。Android Studio 的代价是体积大。完整安装包加上 SDK、模拟器镜像轻松占掉十几个 GB。如果你只是偶尔用一下 ADB 抓个日志为这个装一整套 IDE 有点杀鸡用牛刀。但如果你已经在用或者打算用那顺带解决 ADB 是很自然的选择。3.2 用 SDK Manager 单独拉取 platform-tools不想装完整的 Android Studio但又想用官方的 SDK 管理机制可以用命令行版的 SDK Manager。这个工具叫sdkmanager包含在commandlinetools包里。流程是这样的先从官方下载commandlinetools包解压到一个目录比如~/Library/Android/sdk/cmdline-tools/latest/。然后运行sdkmanager platform-tools它会自动下载 platform-tools 到 SDK 目录下。这种方式的优势是你可以用sdkmanager --list查看所有可用组件用sdkmanager --update统一更新适合需要管理多个 SDK 版本的人。不过sdkmanager本身依赖 Java 运行环境你得先装好 JDK。这就引出了另一个常见问题——JDK 环境变量配置。很多人装完 JDK 后java -version能跑但sdkmanager还是报找不到 Java原因通常是JAVA_HOME没配。这个变量的配置逻辑和 PATH 类似在~/.zshrc里加上export JAVA_HOME$(/usr/libexec/java_home -v 1.8) export PATH$PATH:$JAVA_HOME/bin/usr/libexec/java_home是 macOS 自带的一个小工具能自动定位已安装的 JDK 路径比手写绝对路径靠谱得多。-v 1.8指定版本不写就返回默认版本。3.3 多版本共存时的路径优先级处理当你同时存在 Homebrew 版、手动版、Android Studio 版 ADB 时路径优先级就成了必须处理的问题。系统查找可执行文件的顺序就是 PATH 里目录的排列顺序从左到右。假设你的 PATH 是这样的/opt/homebrew/bin:/usr/local/bin:/Users/you/Library/Android/sdk/platform-tools那系统会先用/opt/homebrew/bin/adb因为它在最前面。如果你想让手动版优先就得把 platform-tools 目录挪到最前面。排查这类问题的标准动作是which -a adb它会按 PATH 顺序列出所有 adb 的完整路径。看到结果后你就能判断当前生效的是哪一个以及是否需要调整顺序。提示不同版本的 ADB 和设备的兼容性可能有差异。如果遇到adb devices显示unauthorized或者连接不稳定可以试试换一个版本的 ADB有时候问题就出在版本不匹配上。4. 环境变量配置的深水区与常见报错4.1 配置文件选错导致配置不生效这是新手最常掉进去的坑。你在~/.bash_profile里认认真真配了 PATH结果新开终端敲adb还是找不到。原因很简单你的 shell 是 zsh它读的是~/.zshrc根本不看~/.bash_profile。怎么确认自己用的是哪个 shell敲echo $SHELL输出/bin/zsh就是 zsh输出/bin/bash就是 bash。macOS Catalina 之后默认都是 zsh。如果你不确定最稳妥的做法是两个文件都配上反正重复配置也不会出错。还有一个更隐蔽的情况有些人用的是 fish 或者 oh-my-zsh 这类增强 shell它们的配置文件路径又不一样。fish 的配置文件在~/.config/fish/config.fish写法也完全不同。如果你装了这类工具得查一下对应的配置方式。4.2 PATH 拼接时的符号错误PATH 配置里最容易写错的就是分隔符和变量引用。macOS 的 PATH 分隔符是冒号:不是分号。我见过有人写成export PATH$PATH;~/Library/Android/sdk/platform-tools这里分号在 shell 里是命令分隔符等于把export PATH$PATH和~/Library/...当成两条命令执行第二条还会因为不是有效命令而报错。正确的写法必须是冒号。另一个常见错误是漏掉$PATHexport PATH~/Library/Android/sdk/platform-tools这样写会把 PATH 完全覆盖掉系统原有的所有命令路径都没了结果就是ls、cd这些基础命令都用不了。遇到这种情况别慌关掉终端重开一个或者用绝对路径/bin/ls来操作把配置改回来就行。4.3 权限问题与 Gatekeeper 拦截从网上下载的可执行文件macOS 的 Gatekeeper 安全机制可能会拦截。你敲adb的时候如果报cannot be opened because the developer cannot be verified需要去“系统设置 - 隐私与安全性”里手动允许或者在终端里执行xattr -d com.apple.quarantine ~/Library/Android/sdk/platform-tools/adb这条命令的作用是移除文件的隔离属性让系统不再拦截。官方下载的包一般不会有这个问题但如果你从其他渠道拿到的工具包可能会遇到。权限问题还体现在文件的可执行位。正常情况下解压出来的 adb 文件应该已经有执行权限但某些解压工具可能会丢掉这个属性。用ls -l adb看一下如果权限位里没有x就执行chmod x ~/Library/Android/sdk/platform-tools/adb4.4 常见报错速查表我把这些年遇到过的 ADB 相关报错整理成一张表方便你对照排查。报错信息可能原因解决方向command not found: adbPATH 未配置或配置未生效检查配置文件、执行 sourceadb: cannot execute binary file下载了错误架构的包确认芯片类型重新下载unauthorized设备未授权调试手机上确认授权弹窗no devices/emulators found设备未连接或驱动问题检查数据线、开启 USB 调试cannot be opened because...Gatekeeper 拦截移除 quarantine 属性more than one device多设备同时连接用-s指定设备序列号adb server version doesnt match客户端与服务端版本不一致杀掉 adb server 重启这张表建议收藏下次遇到报错先对照一遍能省下大量搜索时间。5. 装好之后ADB 常用操作与实战技巧5.1 连接设备与基础命令ADB 装好配好之后第一件事是确认能连上设备。用数据线把安卓设备连到 Mac然后在设备上开启“开发者选项”里的“USB 调试”。不同品牌开启方式略有差异一般是在“关于手机”里连续点击“版本号”七次激活开发者选项。连接后执行adb devices正常应该输出类似List of devices attached ABCD1234 device如果显示unauthorized说明设备上还没确认授权弹窗解锁手机点“允许”即可。如果列表是空的检查数据线是否支持数据传输有些线只能充电、USB 调试是否真的开了。几个高频命令我列一下adb install app.apk # 安装应用 adb uninstall com.example # 卸载应用 adb logcat # 查看实时日志 adb shell # 进入设备 shell adb pull /sdcard/file . # 从设备拉取文件 adb push file /sdcard/ # 推送文件到设备 adb reboot # 重启设备5.2 用 logcat 抓日志的正确姿势adb logcat是排查应用问题最常用的工具但直接敲它会刷屏信息量太大。我一般会配合过滤条件使用。按标签过滤adb logcat -s TAG_NAME按优先级过滤只看错误以上级别adb logcat *:E把日志输出到文件adb logcat log.txt如果要抓取崩溃日志可以先清空缓冲区再操作adb logcat -c adb logcat crash.log然后复现问题抓完按Ctrl C停止。这样日志文件里就只有问题发生前后的记录排查起来清爽很多。提示adb logcat -c清空的是设备端的日志缓冲区不是清空你的终端。这个操作不可逆清空前确认不需要之前的日志。5.3 无线调试与多设备管理Android 11 之后支持无线调试不用数据线也能连。先在设备上开启“无线调试”它会显示一个 IP 和端口然后adb pair 设备IP:配对端口 adb connect 设备IP:调试端口配对码在设备上会显示输入即可。连上之后adb devices就能看到无线设备了。多设备同时连接时所有命令都需要用-s指定设备序列号adb -s ABCD1234 install app.apk序列号就是adb devices列出来的那一串。如果嫌麻烦可以设置环境变量ANDROID_SERIAL指定默认设备。5.4 几个提升效率的小技巧第一个技巧用adb shell配合管道做批量操作。比如批量卸载某个前缀的应用adb shell pm list packages | grep com.example | cut -d: -f2 | xargs -n1 adb uninstall第二个技巧截图和录屏。adb exec-out screencap -p screen.png可以直接把设备屏幕截图保存到电脑比先存到设备再 pull 出来快得多。录屏用adb shell screenrecord /sdcard/demo.mp4按Ctrl C停止后 pull 出来。第三个技巧修改屏幕刷新率做测试。有些设备支持通过 ADB 切换刷新率adb shell settings put system peak_refresh_rate 60 adb shell settings put system min_refresh_rate 60测试完记得改回去不然设备会一直跑在低刷新率下。6. 卸载残留清理与版本维护6.1 Homebrew 卸载 ADB 后的残留处理如果你之前用 Homebrew 装过 ADB后来想换成手动版卸载命令是brew uninstall android-platform-tools但 Homebrew 卸载后可能会留下一些缓存和软链接。缓存目录在~/Library/Caches/Homebrew/可以定期清理。软链接一般在/opt/homebrew/bin/或/usr/local/bin/下卸载后如果还残留adb的软链接会导致which adb指向一个不存在的文件。用ls -l检查一下发现断链就手动删掉。彻底清理 Homebrew 残留是个大工程涉及/opt/homebrew、/usr/local、~/Library/Caches/Homebrew、~/Library/Logs/Homebrew等多个位置。如果你只是想换 ADB 的安装方式没必要把 Homebrew 整个清掉只处理 ADB 相关的残留就够了。6.2 手动安装版的更新方法手动安装的 ADB 更新起来没有 Homebrew 那么方便需要重新下载最新包解压后覆盖旧目录。覆盖前建议先备份一下旧版本万一新版本有问题可以回退。更新步骤# 备份旧版本 mv ~/Library/Android/sdk/platform-tools ~/Library/Android/sdk/platform-tools.bak # 解压新版本到原位置 unzip ~/Downloads/platform-tools-latest-darwin.zip -d ~/Library/Android/sdk/ # 验证 adb version确认新版本正常后再删掉备份目录。如果新版本有问题把备份改回来就行。6.3 版本选择的一点经验ADB 的版本并不是越新越好。新版本可能引入一些行为变化导致和老设备或老工具链不兼容。我的经验是如果你的设备和工作流都正常不要频繁更新 ADB。遇到具体问题时再针对性升级。另外ADB 客户端和服务端的版本要匹配。如果你电脑上的 adb 版本和某个工具内置的 adb 版本差太多可能会出现adb server version doesnt match的报错。解决办法是杀掉当前 server 再重启adb kill-server adb start-server这样会用你当前 PATH 里的 adb 重新启动服务端版本就统一了。7. 一些容易被忽略的细节7.1 关于 Mac 地址和网络工具搜索热词里出现了“mac地址怎么查”和“technitium mac address changer”这类词我顺带说一句。Mac 地址是网卡的物理地址查看方法是“系统设置 - 网络 - 详细信息 - 硬件”或者在终端里用ifconfig命令查看ether后面的那串。修改 Mac 地址属于网络层面的操作和 ADB 调试没有直接关系这里就不展开了只是提醒别把这两个“Mac”搞混——一个是苹果电脑一个是网卡地址。7.2 模拟器场景下的 ADB如果你用夜神模拟器或者其他安卓模拟器它们通常自带 ADB 服务。模拟器启动后用adb connect 127.0.0.1:端口号就能连上。不同模拟器端口不同夜神一般是 62001雷电是 5555。连上之后操作和真机一样。需要注意的是模拟器自带的 ADB 版本可能和你系统里的不一致。如果连接出问题可以试试用模拟器目录下的 adb 来操作或者统一用系统里的版本。7.3 精简列表与权限操作热词里提到的“vivo adb精简列表”和“adb解除安装权限”本质上是利用 ADB 的pmpackage manager命令来管理系统应用。比如禁用某个预装应用adb shell pm disable-user --user 0 包名恢复adb shell pm enable 包名卸载预装应用对当前用户adb shell pm uninstall --user 0 包名这些操作有风险禁用或卸载系统关键应用可能导致设备异常。操作前一定要确认包名对应的应用是什么不确定的不要动。建议先pm list packages列出所有包找到目标后再操作。注意不同品牌对 ADB 权限的限制不同有些操作在部分设备上会被拒绝。遇到SecurityException或Permission denied说明该操作被系统策略拦截了不要强行绕过。7.4 环境变量配置失败的自查清单最后给一个环境变量配置失败的自查清单按顺序排查基本能定位问题确认 shell 类型echo $SHELL确认配置文件正确zsh 用~/.zshrcbash 用~/.bash_profile确认配置语法正确PATH 用冒号分隔保留$PATH确认配置已生效source ~/.zshrc后echo $PATH确认文件存在且有执行权限ls -l看权限位确认没有多个版本冲突which -a adb确认 Gatekeeper 没拦截必要时移除 quarantine 属性这七步走完绝大多数环境变量问题都能解决。如果还不行把echo $PATH和which -a adb的输出贴出来基本就能看出问题在哪了。我在实际使用中的体会是ADB 这类命令行工具的安装难点从来不在工具本身而在环境配置和版本管理这些“周边”问题上。把 PATH 理顺、把版本统一、把残留清干净后面用起来就是一劳永逸的事。手动安装虽然比 Homebrew 多几步但每一步都看得见摸得着出了问题也知道去哪里找原因这种掌控感在排查疑难问题时特别有价值。