
简介本资源是 Android 官方命令行工具包Windows 版面向无 IDE 依赖的 Android 开发者、CI/CD 工程师及轻量级 SDK 管理需求用户用于在不安装 Android Studio 的前提下完成 SDK 组件下载、AVD 创建、APK 分析与构建工具链初始化等核心操作。压缩包共 100 个文件含 90 个 JAR支撑 sdkmanager、avdmanager、apkanalyzer 等工具运行、7 个 BAT 批处理脚本提供开箱即用的 Windows 命令入口、1 个 README 和配置类文件整体大小为 115.29MB结构精简、无冗余图形界面组件。目前已有 236 人学习下载适合需快速搭建纯命令行 Android 构建环境、定制化 SDK 管理流程或嵌入自动化脚本的中高级开发者。 很多人在Windows上下载了commandlinetools-win-9123335-latest.zip之后第一反应是“这玩意到底干啥用的”。它既不是一个完整的IDE也不是一个能直接跑应用的模拟器但如果你是做Android开发、自动化构建、CI/CD流水线或者单纯想在命令行环境下管理SDK这个包就是绕不开的入口。这篇想讲的就是这个zip从解压到真正能干活的全过程包括那些文档里不会明说、但实际使用时一定会踩的坑。先说清楚commandlinetools-win-9123335-latest.zip是Android SDK的命令行工具包专门给Windows环境用的。它里面包含的核心工具是sdkmanager和avdmanager前者用来下载和管理SDK组件比如platform-tools、build-tools、具体的Android平台版本后者用来创建和管理模拟器AVD。Android Studio虽然自带一套图形化的SDK Manager但在服务器、Docker容器、虚拟机或者任何没有图形界面的场景下这套命令行工具就是唯一的选择。即使你平时用Android Studio我也建议把命令行工具单独装一份很多批量操作、版本切换、脚本自动化用命令行比点鼠标高效得多。这个zip的版本号9123335对应的是cmdline-tools 12.0属于2024年之后发布的较新版本。和旧版相比它对JDK版本有硬性要求必须JDK 17对目录结构的摆放也更严格。下面我把整个过程拆开讲。1. 解压之后别急着用先搞懂cmdline-tools的目录摆放逻辑拿到zip之后如果不加思考直接双击解压大概率会看到一个名叫cmdline-tools的文件夹里面是bin、lib等子目录。很多人以为这样就算装好了然后运行sdkmanager结果直接报错提示找不到SDK根目录。原因很简单cmdline-tools的目录结构有一套自己的约定你必须在某个位置放一个名为latest的父目录把解压出来的cmdline-tools内容整体放进去。也就是说正确的手动安装路径是这样的你的SDK根目录/ └── cmdline-tools/ └── latest/ ├── bin/ ├── lib/ ├── NOTICE.txt ├── package.xml └── source.properties举个例子如果你想在D:\Android\Sdk下安装那么最终sdkmanager.bat的完整路径应该是D:\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat。这个latest目录名不能随便改原因是sdkmanager在运行时会在自身路径中向上查找cmdline-tools/latest这个固定结构用它来解析SDK根目录。如果你把目录命名成cmdline-tools\v12.0或者直接cmdline-tools那么sdkmanager内部计算出来的SDK根目录就会出错表现就是各种“SDK location not found”或者“Unable to locate a Java Runtime”。这是安装过程中最容易出问题的第一步。我见过很多人卡在这里明明java环境没问题zip也解压了但一跑sdkmanager --list就报错折腾半天发现是目录结构不对。另外有一个细节这个zip解压后的根目录默认就叫cmdline-tools如果你直接按照上面的结构去建目录操作上应该是在SDK根目录下创建cmdline-tools文件夹。在cmdline-tools下创建latest文件夹。把zip解压出来的内容注意是里面的bin、lib等文件不是cmdline-tools这层壳全部移动到latest中。如果你嫌手动建目录麻烦也可以先随便解压到一个临时位置然后用命令行里的robocopy或者xcopy把内容整体搬过去。这一步做对了后面就顺了。2. 安装前的Java环境JDK 17是硬门槛不是建议新版cmdline-tools对Java的要求是JDK 17。这不是“推荐”版本而是“强制”版本。如果你用的是JDK 8或者JDK 11运行sdkmanager时通常会收到这样的错误Error: Could not find or load main class com.android.sdklib.tool.sdkmanager.SdkManagerCli或者更直接的Unsupported major.minor version 61.0这个61.0指的就是Java 17编译出来的class文件版本号。JDK 8对应52.0JDK 11对应55.0JDK 17对应61.0。如果你看到Unsupported major.minor version不用怀疑就是JDK版本不够新。在Windows上安装JDK 17并不复杂下载安装包、配置环境变量就行。但有几个细节值得注意。首先同一台机器上可能装了多个JDKJAVA_HOME环境变量指向的版本可能不是17。sdkmanager脚本会优先读取JAVA_HOME如果你在命令行里敲java -version显示的版本和JAVA_HOME不一致说明Path里的顺序有问题或者JAVA_HOME被其他安装程序覆盖了。其次如果你用的是Android Studio自带的JBRJetBrains Runtime这个运行时是基于JDK 17的它通常位于Android Studio的安装目录下的jbr文件夹中。你完全可以把JAVA_HOME指向这个jbr这样就不用单独装JDK了。但如果你在服务器上只想装命令行工具不装Android Studio那么独立JDK 17就是必需品。建议在打开命令行工具之前先固定一个干净的环境。比如在运行sdkmanager之前在同一个命令行窗口里执行set JAVA_HOMEC:\Program Files\Java\jdk-17 set PATH%JAVA_HOME%\bin;%PATH%这样可以临时覆盖系统级的JAVA_HOME避免因为全局配置混乱导致排查困难。等确认一切正常之后再把JAVA_HOME固化到系统环境变量里。3. sdkmanager的日常操作从查看列表到安装组件当目录结构摆对、JDK 17就位之后sdkmanager就可以正常跑了。我一般先在命令行里运行sdkmanager --list这个命令会输出两部分内容Installed packages和Available Packages。前者是你已经装好的SDK组件后者是可以安装的全部组件列表很长包含platform-tools、build-tools、platforms、system-images、emulator等。强烈建议第一次运行--list时把输出重定向到文件里方便搜索sdkmanager --list sdk_list.txt然后你就可以用文本编辑器的搜索功能找想要的组件避免在命令行里翻半天。如果是在PowerShell里输出重定向的方式一样但编码可能不同中文Windows环境下推荐用Out-File -Encoding utf8来避免乱码。安装组件的命令格式是sdkmanager platform-tools platforms;android-35 build-tools;35.0.0注意引号不能少因为组件名包含分号和点不加引号会导致命令解析错误。可以一次性传入多个组件sdkmanager会按顺序安装。实际使用中最常装的就是这几种组件名用途platform-toolsadb、fastboot等基础调试工具platforms;android-XX对应Android版本的SDK平台库build-tools;XX.X.Xaapt、aidl、zipalign等编译打包工具system-images;android-XX;google_apis;x86_64模拟器系统镜像emulatorAndroid模拟器本体sources;android-XXSDK源码方便阅读系统实现如果只是做一般的命令行构建platform-toolsplatforms;android-35build-tools;35.0.0基本就够了。如果是做自动化测试还需要系统镜像和模拟器。有个很容易忽略的点安装组件时sdkmanager会对每个组件的许可协议进行确认它不会一口气全装上而是每下载一个组件前弹一次确认如果人不在电脑前安装就会卡住。解决办法是先执行sdkmanager --licenses这个命令会遍历所有组件的许可协议并逐条提示输入y接受即可。但更省事的做法是直接接受全部许可yes | sdkmanager --licenses如果你在Windows的cmd或者PowerShell里没有yes命令可以用一个循环代替。在PowerShell里1..100 | ForEach-Object { y } | sdkmanager --licenses或者在cmd里用(for /L %i in (1,1,100) do echo y) | sdkmanager --licenses这里有个经验之谈license的接受状态是全局的以licenses目录下的文件形式存储在SDK根目录里。一旦接受过后续安装新组件时如果涉及相同协议就不会再询问了。但是如果你在CI流水线的临时环境中每次都从零部署SDK那yes | sdkmanager --licenses这行几乎是标配。4. 环境变量配置让adb和sdkmanager全局可用组件装完后下一步就是配置环境变量。至少有两个变量是必设的ANDROID_HOME和ANDROID_SDK_ROOT。ANDROID_HOME指向你的SDK根目录比如D:\Android\Sdk。ANDROID_SDK_ROOT和它指向同一个地方虽然这个变量在新版工具链中逐渐被淡化但很多老旧的构建脚本仍然会读取它所以两个都设上不会有坏处。然后是PATH。需要把以下目录加进PATH%ANDROID_HOME%\cmdline-tools\latest\bin让sdkmanager、avdmanager全局可用。%ANDROID_HOME%\platform-tools让adb、fastboot全局可用。%ANDROID_HOME%\emulator让emulator命令全局可用方便启动模拟器。具体操作是在系统环境变量里编辑Path新增这三行。有个小心得在Windows上不要把%ANDROID_HOME%变量直接嵌入到Path里的路径结尾加多余的反斜杠或者空格否则adb虽然能启动但在某些工具链解析路径时会出毛病。写%ANDROID_HOME%\platform-tools就够了不要写成%ANDROID_HOME%\platform-tools\。配置完之后新开一个命令行窗口执行adb version sdkmanager --version如果两个命令都能正常输出版本号说明环境变量生效了。这里有一个很常见的坑如果你在配置环境变量之前就已经打开了一个终端窗口那么这个窗口里的环境变量不会自动刷新需要关闭后重新打开。如果不想重启终端可以用refreshenv命令需要安装Chocolatey才有或者直接在新窗口里测试。另外如果你电脑上同时装有Android Studio它可能会在%LOCALAPPDATA%\Android\Sdk下建立自己的SDK目录。这个目录和你的ANDROID_HOME指向的目录可能不是同一个。建议统一否则会出现命令行里编译的APK和Android Studio里构建的APK签名配置不一致的问题排查起来非常痛苦。5. 实操中容易踩的三个坑licenses、代理和SDK组件版本匹配5.1 licenses目录与持续集成环境的坑sdkmanager在首次安装组件时会在SDK根目录下生成一个licenses目录里面存放每个许可协议的哈希文件。如果你在临时目录里安装SDK、跑完构建后直接删掉下次又要重新接受一遍许可。更麻烦的是如果CI脚本里yes | sdkmanager --licenses和sdkmanager的安装命令执行顺序不对或者sdkmanager --licenses失败但没设置set -e那么后续安装也会失败。建议在CI脚本里用yes |管道并且一定要确保ANDROID_HOME目录有写权限。在Windows的容器环境里如果目录权限不足licenses写入失败即使你输入一百个y也没用。5.2 网络代理下载慢或者卡住的真实原因sdkmanager默认从Google的官方仓库下载组件。在部分网络环境下直接下载会超时或者断流表现是Downloading...进度条长时间不动或者直接报java.net.SocketTimeoutException。这个问题在CI环境、服务器环境尤其常见。一个务实的做法是配置镜像源。sdkmanager支持通过REPO_OS_OVERRIDE和sdkmanager --channel之类的参数调整一些行为但镜像配置并不是一个简单的命令行开关而是通过修改SDK根目录下的repositories.cfg文件或者通过环境变量ANDROID_SDK_SOURCE来指定仓库地址。不过坦白说官方对“自定义仓库”的支持并不友好大多数团队的实际做法是预先在一个可联网的机器上把SDK组件下载好做成压缩包传到内网服务器然后在CI脚本里解压使用。这样虽然少了实时下载的灵活性但CI构建速度更快也更稳定。我个人的经验是如果内网环境无法访问官方仓库与其纠结镜像配置不如直接把基础SDK目录做成一个可复用的基础镜像这是投入产出比最高的方式。5.3 SDK组件版本匹配问题sdkmanager装哪个build-tools版本跟你项目里compileSdkVersion和buildToolsVersion的配置是紧密相关的。项目里配置compileSdkVersion 35那就至少需要platforms;android-35配置buildToolsVersion 35.0.0那就需要build-tools;35.0.0。这里有个细节新版AGPAndroid Gradle Plugin在构建时如果发现build-tools版本缺失不会自动帮你安装而是直接报一个错误提示。所以手动管理SDK时确保依赖项齐全是一个很重要的前置步骤。怎么确认项目需要哪些SDK组件最简单的办法是在项目根目录执行gradlew :app:dependencies或者直接看app/build.gradle里的配置。如果你用的AGP版本比较新它还会要求某个最低build-tools版本。这个版本信息在AGP内部的SDK组件要求表里写死了你可以在项目构建失败时的报错信息里看到具体需求。6. avdmanager命令行创建和管理模拟器cmdline-tools里另一个常用工具是avdmanager全称是Android Virtual Device Manager。它负责创建、删除、列出AVD。在无图形界面的服务器上创建模拟器靠的就是这个命令。创建AVD之前必须保证已安装对应的系统镜像。比如你想创建一个Android 35、x86_64架构、带Google APIs的模拟器那么需要先安装sdkmanager system-images;android-35;google_apis;x86_64然后创建AVDavdmanager create avd -n test_avd -k system-images;android-35;google_apis;x86_64 -d pixel_5-d参数指定设备配置文件可以用avdmanager list device查看所有可用的设备ID。如果你不指定-davdmanager会创建一个默认配置的AVD。-n是AVD的名字后续启动模拟器时要用。创建完之后可以用avdmanager list avd确认是否创建成功。然后启动模拟器emulator -avd test_avd -no-window -no-audio -gpu swiftshader_indirect在服务器上没有显示器的情况下-no-window是必需的。-gpu swiftshader_indirect表示用软件渲染GPU虽然性能一般但没有物理GPU时这是最稳妥的方案。这里有一个实际使用中容易忽略的地方AVD的存储位置在Windows上是%USERPROFILE%\.android\avd如果你在CI里以不同账户运行构建AVD列表会出现相互不可见的情况。如果发现avdmanager list avd看不到之前创建的AVD可以先检查一下当前用户的.android目录下是否有对应的ini和avd文件夹。7. 一个完整的Windows命令行部署清单把整篇文章的内容串起来一个从零到可用的Windows环境部署流程我一般写成这样的清单安装JDK 17配置JAVA_HOME和PATH。创建SDK目录比如D:\Android\Sdk。下载commandlinetools-win-9123335-latest.zip解压并按cmdline-tools/latest目录结构摆放。设置ANDROID_HOME和ANDROID_SDK_ROOT为SDK目录。把cmdline-tools/latest/bin、platform-tools、emulator加入PATH。新开命令行窗口运行sdkmanager --licenses接受所有许可。运行sdkmanager platform-tools platforms;android-35 build-tools;35.0.0安装基础组件。运行adb version和sdkmanager --version验证环境。如果有模拟器需求再安装系统镜像并创建AVD。这套流程我前前后后在不同机器上重复过几十遍每一步都可能出一些小岔子但归根结底就三类目录结构不对、JDK版本不对、环境变量没生效。把这三点盯住基本上就顺了。最后分享一个小技巧sdkmanager安装组件时如果某个版本装错了想卸载直接删SDK目录下对应的文件夹就行没有单独的卸载命令。比如D:\Android\Sdk\platforms\android-35就是Android 35平台库删掉这个目录就等于卸载了这个组件。但注意别手滑删错SDK目录里build-tools和platforms下往往有很多版本共存删掉之后如果项目还依赖它下次构建就会从零重新下载。对于commandlinetools-win-9123335-latest.zip这个包本身我目前使用下来的体验是只要目录结构摆对JDK 17就位它就是一个稳定可靠的基础工具。相比Android Studio那套庞大的图形界面命令行工具更轻量、更可控尤其适合脚本化和自动化场景。希望这篇东西能帮你少走点弯路。本文还有配套的精品资源点击获取