简介:本资源为 Android 官方命令行工具 Windows 版(commandlinetools-win-11076708-latest.zip),面向无需完整 Android Studio 的开发者、CI/CD 工程师及轻量级安卓构建场景用户,解决 SDK 管理、AVD 创建、APK 分析与混淆调试等核心命令行需求。压缩包共 104 个文件,含 93 个 Java 工具类 jar 包(支撑 sdkmanager、avdmanager、apkanalyzer、lint 等核心功能)、8 个 Windows 批处理脚本(如 sdkmanager.bat、avdmanager.bat)、1 个说明文档及配置文件,整体体积 146.47MB,结构精简、开箱即用。目前已有 561 人学习下载,适合熟悉 Android 构建流程的中高级开发者快速部署离线 SDK 环境。读者可直接执行命令行工具完成 SDK 平台安装、模拟器管理、资源缩减、堆栈还原(retrace)及 Kotlin 编译支持等全链路操作,无需依赖 IDE,特别适用于自动化构建、容器化开发与教学环境复现。 很多人在搭建Android开发环境时,第一步就卡在SDK的获取上。以前装Android Studio顺手就把SDK装了,但当你只需要命令行编译、做CI自动化打包,或者要给一台没有图形界面的服务器配环境时,那个几百MB的commandlinetools-win-11076708-latest.zip就成了绕不开的起点。这篇文章就把这东西从头到尾讲透,从它是什么、怎么装、怎么用,到实战中会踩到的各种坑,一次说清。
1. 认识commandlinetools:Android SDK的“最小启动器”
1.1 为什么现在的SDK要从命令行工具开始装
早期Android SDK是一个体积庞大的离线包,下载下来解压即用。后来Google改变了分发策略,不再提供完整SDK的独立压缩包,而是只给一个很小的“安装器”——也就是commandlinetools。它本身不包含任何平台版本、构建工具,只包含sdkmanager、avdmanager等几个核心命令,真正的SDK组件全靠这些命令去下载。
这个设计很像Linux系统的包管理器:先装apt,再用apt装别的。commandlinetools就是Android世界的“包管理器外壳”,而platform-tools、platforms;android-34、build-tools;34.0.0这些才是实际干活的东西。所以你在命令行环境里安装SDK,第一步永远是拿这个zip,第二步永远是跑sdkmanager。
1.2 zip包内部有什么:每个目录都是干什么的
拿到手先别急着解压,看一下目录结构会更清楚。解压后你会得到一个cmdline-tools文件夹,里面主要是bin和lib两个目录。
bin目录里放着三个关键脚本:sdkmanager.bat用于管理SDK组件的安装和卸载,avdmanager.bat用于创建和管理虚拟设备,apkanalyzer.bat用于分析APK文件。Windows下是.bat批处理,Linux/macOS下是对应的无扩展名shell脚本,功能完全一样。
lib目录里是一堆jar包,包括sdkmanager.jar、avdmanager.jar等。这些脚本本质上是“壳”,真正逻辑都在jar里,外层用Java启动它们。所以你会发现一个硬性前提:系统必须先装好JDK,否则.bat双击后一闪而过,窗口都来不及看清。这一点后文会详细讲。
1.3 版本号11076708到底代表什么
commandlinetools-win-11076708-latest.zip这串名字里,win表示Windows平台(对应还有linux和darwin版本),11076708是构建版本号,latest表示这是当前最新稳定渠道的包。
版本号本身没有直接的“API level”含义,它对应的是工具自身的迭代。比如这个版本对应JDK 17是没问题的,也支持后续下载最新的platforms;android-34、build-tools;34.0.0。实际使用时没必要纠结具体版本号,认准“从官方渠道拿最新”就行。因为SDK工具版本太旧时,可能不支持新发布的Android平台,这时sdkmanager --list能看到新组件,但安装时提示版本不匹配;只要换最新款commandlinetools即可解决。
2. 从零开始:下载、解压与目录规划
2.1 下载前先想清楚的事
下载地址是Android开发者官网的“命令行工具”页面。页面会列出Windows、Linux、macOS三套包,千万别下错平台。Windows下选commandlinetools-win-...,Linux服务器选commandlinetools-linux-...,macOS选commandlinetools-mac-...,mac还有Apple Silicon的变体(darwin-aarch64),根据芯片选。
下载时另一个容易忽略的点是版本一致性。如果你后面要跑的是老项目,compileSdkVersion可能只有30或31,那没必要追最新,下载一个对应年代的commandlinetools版本反而更稳。但正常情况下直接拿最新就好,因为有--sdk_root参数可以隔离不同SDK版本,多版本共存也不冲突。
另外,下载完建议先校验一下文件完整性。Windows下可以用certutil -hashfile commandlinetools-win-11076708-latest.zip SHA256,Linux下用sha256sum,拿算出来的哈希值和官网给的对一下。这个问题我踩过一次:由于网络中断,下载的zip不完整,解压时一直提示文件损坏或CRC校验失败,当时一度以为是电脑问题,最后才发现是被“好心”的下载工具改坏了文件格式。
2.2 解压到哪、目录怎么命名:最常见的低级错误
解压这一步看着简单,实际很多人在这里翻车。Google在文档里明确说了,cmdline-tools目录下面必须再套一层latest。也就是说,最终的目录结构应该是:
你的SDK目录/ └─ cmdline-tools/ └─ latest/ ├─ bin/ ├─ lib/ ├─ NOTICE.txt └─ source.properties如果你直接解压成cmdline-tools/bin这样的结构,运行sdkmanager时会报错,因为它找不到自己的lib目录和版本信息。网上很多人问“为什么sdkmanager双击闪退”“为什么提示找不到SDK”,八成就是目录结构错了。
推荐的安装路径是放在一个独立的目录,比如D:\Android\Sdk或~/Android/Sdk。为什么不建议放在C盘默认位置呢?因为SDK组件全装完有好几个GB,C盘空间紧张的同学很快会后悔。把commandlinetools解压到SDK目录下的cmdline-tools/latest后,后续通过sdkmanager下载的所有组件都会默认装到同一根目录下,方便统一管理。
如果非要用不叫latest的文件夹名,理论上也能通过--sdk_root参数指定,但那就把自己绕进复杂度里了,老老实实用latest是最省心的做法。
2.3 配置环境变量,让命令随手可用
解压完成后,需要把cmdline-tools\latest\bin加入PATH,这样在任何目录下敲sdkmanager都能识别。Windows下的方法是:设置里搜索“编辑系统环境变量” → 环境变量 → 在Path中新建一行,填入你的cmdline-tools\latest\bin路径。Linux下则写入~/.bashrc或~/.zshrc:
export ANDROID_HOME=$HOME/Android/Sdk export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools建议顺手把ANDROID_HOME也配了。虽然sdkmanager本身不强制读这个变量,但后面的Gradle、Flutter、React Native等工具都会读它。特别是做Flutter开发时,flutter doctor会检查ANDROID_HOME是否存在,没配好它就只能报错,提示找不到Android SDK。
配置完成后别急着高兴,先敲一句sdkmanager --version验证一下。如果提示“不是内部或外部命令”,说明PATH没配上或当前终端没重新加载;Linux下记得先source ~/.bashrc。如果提示找不到Java,那就是JDK这一步还没解决,看后面的排查部分。
3. 核心实操:sdkmanager的安装与常用命令
3.1 先确认JDK:这个工具的全部前提
sdkmanager是用Java写的,所以第一步是确认系统里有可用的JDK。这个工具对JDK版本有硬性要求——较新版本(如11076708这个时期)要求JDK 17及以上。装个OpenJDK 17或Oracle JDK 17都很常见,从Eclipse Adoptium或各发行版软件源都能拿到,安装后配好JAVA_HOME环境变量就行。
验证JDK是否就绪,打开终端敲java -version,能看到版本号(比如openjdk version "17.0.8")就是正常的。注意Windows下如果装了多个Java版本,最好在环境变量里把JAVA_HOME指清楚,否则java命令可能被其他软件带的JRE抢占,导致sdkmanager启动时出现奇妙的问题。
有个常见误导是“运行sdkmanager一定要把JAVA_HOME配好”,实际只要java命令在PATH中可用就能跑。但很多工具链(比如Gradle、Android Studio)都在读JAVA_HOME,所以还是建议一步到位把JAVA_HOME配好,省得以后再来补。
3.2 列出可安装组件,选对platform和build-tools
安装任何东西之前,建议先看看有哪些组件可以装。运行:
sdkmanager --list输出内容很多,会分两个区域:Installed packages和Available Packages。Available Packages里比较重要的几类:
platforms;android-XX:对应Android API Level的开发平台。比如platforms;android-34就是Android 14的SDK平台。build-tools;XX.X.X:编译、打包APK所需的工具链。比如build-tools;34.0.0。platform-tools:包含adb、fastboot这些连接真机和平板的关键工具。ndk;XX.X.X:做C/C++原生开发时的Native Development Kit。cmake;X.X.X:NDK开发中用于构建原生代码的构建系统。system-images;android-XX;...:创建模拟器时需要的系统镜像。
对于常规Android开发,最基础的是:
sdkmanager "platform-tools" "platforms;android-34"其中platforms;android-34可以换成项目里compileSdkVersion对应的值。如果你的项目compileSdkVersion是33,装platforms;android-33就够,过度装高版本也不会带来额外收益。
3.3 实际安装命令的细节与提示
安装是一件“看似简单,坑却不少”的事。直接运行:
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"它会先显示一些许可协议,要求你输入y确认。这里有个升级版的需求——如果你在脚本或CI里自动安装,不可能每次都人工去输y,所以官方提供了这样的写法:
yes | sdkmanager --licenses这个命令会一次性接受所有许可协议。建议在任何新机器上装完SDK后,先执行一次这条命令,能省掉后面无数次的“y/N”交互。
安装过程中,你会发现它并不显示下载进度条,只有一些类似[====]的简单进度信息,不要以为卡住了。国内网络环境下,某些组件下载速度可能会很慢甚至超时,这时候可以考虑设置镜像源,后文会单独说。
装完之后再执行sdkmanager --list_installed,看到刚才安装的包出现在列表里,就说明成功了。此时platform-tools目录下应该有adb.exe(Windows)或adb(Linux/macOS)。adb version能跑出版本号,证明整个环境已经可用。
3.4 接受许可协议:一条命令解决所有y/N交互
可能有人会问:“为什么Google要搞这么多次许可协议确认?”因为Android SDK的各个组件分别受不同开源协议约束,比如NDK有LGPL,系统镜像有Google的Terms and Conditions,所以首次安装必须逐一确认。
在交互终端里一个一个y还能接受,但在无人值守的安装脚本里就成了灾难。yes | sdkmanager --licenses这个组合是社区的标准做法:yes命令会不断输出y并管道传给sdkmanager,相当于自动把所有的“Do you accept the license?”都回答了。实测下来这一步执行完,后面任何常规安装都不再出现许可确认,体验顺畅得多。
有一个细节值得注意:yes会持续输出,直到目标进程退出。如果sdkmanager已经接受完所有许可,管道的另一端结束了,yes自然会被中断,不会无限刷屏。这个命令在Windows的CMD下也能用,只是如果你用的是PowerShell,yes命令不被原生支持,需要装GNU工具或改用cmd /c "echo y | sdkmanager --licenses"。
4. 进阶用法:命令行SDK的实战场景
4.1 搭建“无Android Studio”的编译环境
有了sdkmanager,就算电脑上完全没装Android Studio,也能构建出一个能编译APK的开发环境。这在很多场景很有用:CI服务器、Docker镜像、内存有限的云开发机等。
基本步骤是以Android目录为根,用sdkmanager装齐platform-tools、platforms;android-XX、build-tools;XX.X.X,再用Gradle拉取项目依赖并执行gradlew assembleDebug,Gradle会通过ANDROID_HOME自动定位SDK并完成编译。整个过程不需要打开任何IDE。
但需要注意,Gradle本身需要下载,第一次构建时它还要下载对应版本的全部分发包,所以这类环境务必保证网络稳定。如果你在CI上构建,建议把Gradle和Android依赖的缓存目录设为持久化卷,否则每次构建都全量下载,慢到你怀疑人生。
4.2 avdmanager创建模拟器:命令行也能开虚拟机
sdkmanager装好以后,旁边还坐着一个avdmanager,它是创建Android虚拟设备(AVD)的命令行工具。平时大家都用Android Studio的可视化界面创建模拟器,但其实命令行也能搞定,而且更适合脚本化配置。
先装一个系统镜像:
sdkmanager "system-images;android-33;google_apis;x86_64"然后创建AVD:
avdmanager create avd -n test_device -k "system-images;android-33;google_apis;x86_64" -d pixel_5-n是给设备起名,-k指定系统镜像包,-d指定设备定义(可以在avdmanager list device里查看所有可选设备)。创建完成后,可以直接用emulator -avd test_device启动模拟器。
这条路径特别适合对模拟器做批量测试的团队:把AVD创建、SDK安装全部写进脚本,新入职同事一条命令就能拉起完整的本地Android环境。省去打开Android Studio、点半天图形界面的功夫。
4.3 用命令行工具直接做APK分析
apkanalyzer是commandlinetools包里的另一个实用工具。它能在不安装IDE的情况下对APK做深度分析。查看APK的基本信息:
apkanalyzer manifest print app.apk这条命令会输出APK的AndroidManifest.xml可读内容,如包名、版本、权限、组件声明等。要查看APK的下载大小和APK的原始文件大小对比:
apkanalyzer apk download-size app.apk apkanalyzer apk file-size app.apk以前要分析APK,都得去下载Android Studio或者用第三方工具。现在命令行直接搞定,写个脚本批量分析应用市场的APK也不在话下。安全检查场景下,可以用它看APK申请了哪些敏感权限,不需要反编译工具。
4.4 把sdkmanager接入自动化脚本
如果你维护着多台开发机或CI节点,建议把所有安装步骤写成脚本,而不是每台机器都手动操作一遍。Windows下可以写个批处理:
@echo off set ANDROID_HOME=D:\Android\Sdk mkdir %ANDROID_HOME%\cmdline-tools tar -xf commandlinetools-win-11076708-latest.zip -C %ANDROID_HOME%\cmdline-tools move %ANDROID_HOME%\cmdline-tools\cmdline-tools %ANDROID_HOME%\cmdline-tools\latest yes | sdkmanager --licenses sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"Linux下同理可以用一行行的bash命令组合。核心思路就三步:解压到正确目录 → 接受许可 → 安装组件。多台机器全部Copy-Paste运行,环境保证一致,不会出现“我本地好好的,你那怎么不行”的尴尬。
一个小提示:如果团队有统一的Gradle项目,还可以借助Gradle的android-sdk-manager插件自动安装SDK,但那是另一个话题。纯命令行脚本的方式最透明、最好排查问题。
5. 常见问题与排查技巧实录
5.1 “找不到Java”或“UnsupportedClassVersionError”
这是新手最容易撞的墙。症状是运行sdkmanager时提示java: command not found,或者更高级一点:Error: A JNI error has occurred, please check your installation and try again。
原因基本是JDK没装,或装了但没进PATH,或版本太旧。新版commandlinetools要求JDK 17+,如果系统里是JDK 8或11,启动时就会抛出UnsupportedClassVersionError。解决办法:安装JDK 17及以上,确保JAVA_HOME和PATH配置正确,然后注销重登或刷新终端再试。
Windows下还有一个隐性问题:如果安装过Oracle自带JRE,它可能把java.exe放到C:\Windows\System32里,导致PATH优先级被干扰。排查方法是在命令行里敲where java,看它实际解析到哪个目录,就能定位到底是哪个Java在被调用。
5.2 目录结构不对导致的“SDK not found”类报错
就像前文说的,cmdline-tools目录下必须有latest子目录。如果解压时少了这一层,运行sdkmanager --list_installed可能不会立刻报错,但后续Gradle、本地的flutter doctor可能会提示找不到SDK。
因为Gradle查找SDK时,会找$ANDROID_HOME/platforms、$ANDROID_HOME/build-tools这些目录。如果ANDROID_HOME指到了D:\Android\Sdk,但SDK组件实际被安装到了其他层级,目录错乱就会导致Gradle的SDK定位失败。
我的建议是把目录结构严格做成:
D:\Android\Sdk ├─ cmdline-tools │ └─ latest ├─ platform-tools ├─ platforms ├─ build-tools └─ ndk这样所有工具默认自动归位,Gradle、Flutter、React Native都能正确识别。不要去自定义“个人风格”的目录命名,代价是各种工具找不到路径。
5.3 网络下载慢或超时:换镜像源的方案
国内连接官方源下载SDK组件,经常出现几十KB/s的龟速甚至直接超时。这里不建议用什么第三方商业加速工具,也不建议折腾额外网络设备,最稳妥的方案是使用国内开源镜像站。比如阿里云镜像、腾讯云镜像都提供Android SDK的镜像地址。
用sdkmanager时,可以通过--channel和仓库地址调整吗?其实sdkmanager一直没有提供直接改源的官方参数,但可以通过设置REPO_OS_OVERRIDE或修改repositories.cfg来影响。更简单的方法是在Gradle的init.gradle或项目的build.gradle里配置阿里云镜像仓库来拉取依赖,SDK组件本身可以通过下载镜像站打包好的SDK文件来实现。
更实际的操作是:从镜像站直接下载完整SDK压缩包(比如平台、build-tools),解压到对应目录,然后用sdkmanager补装缺失的组件。这样既绕过了最慢的部分,又保留了sdkmanager后续自动安装能力。
另外分享一个经验:避免在高峰时段执行大批量安装。清晨或午夜的下载成功率明显高很多,这也是不少CI团队把环境预置放在深夜定时任务的原因。如果实在是公司网络限制,可以下载用离线包放入本地缓存,Gradle或sdkmanager会自动发现缓存,不再重复下载。
5.4 提示“Warning: File ... could not be copied”或权限问题
Windows下如果SDK目录安装在C:\Program Files这类系统保护目录,普通用户执行sdkmanager安装组件时经常出现权限不足,导致文件无法写入。典型的报错长这样:
Warning: File C:\Program Files\Android\... could not be copied.解决办法有两个方向:一是用管理员权限运行终端再执行sdkmanager,二是把SDK目录改到用户目录下,比如C:\Users\你的用户名\Android\Sdk或D:\Android\Sdk。我更推荐后者,因为以管理员身份运行容易把目录里的文件权限搞乱,后续非管理员工具的读写会受影响。
Linux下类似,别把SDK放到/usr或/opt下然后纠结权限,直接放~/Android/Sdk,设置ANDROID_HOME后完全无障碍。既然是开发工具,使用者就该有完整的读写控制权,这是最舒服的状态。
5.5 和Android Studio的SDK目录冲突问题
很多人的电脑上既有Android Studio,又在折腾命令行SDK。这时要确认你希望ANDROID_HOME指向哪边。如果Android Studio已经自动装了一套SDK,理论上可以共用同一套,没必要再装第二份。Android Studio的SDK Manager里显示的“Android SDK Location”就是ANDROID_HOME应该指的位置。
如果你决定用命令行管理新SDK,可以不改动Android Studio自身配置,只把ANDROID_HOME环境变量指向新SDK目录。这样的话,Android Studio里通过图形界面安装的组件,和新命令行装的状态是隔离的。但如果你某个项目打开时用的是Android Studio内置SDK,另一些脚本用命令行SDK,很容易出现“版本不一致”的怪问题。
我的习惯是统一:非特殊需求,ANDROID_HOME只指一个SDK根目录,cmdline-tools和Android Studio共用。这样两边装的东西都落在同一目录树,基本不会出幺蛾子。
6. 实用总结与我的个人经验
把commandlinetools-win-11076708-latest.zip从“一个看不懂的压缩包”变成“顺手好用的SDK管理工具”,其实本质就三步:解压到cmdline-tools/latest,配置好JDK和PATH,用sdkmanager装组件。整个过程不复杂,但每一步都有细节,目录结构、许可协议、网络源都是最常见的绊脚石。
我个人的体会是:不要嫌命令行麻烦。就算你平时都用Android Studio,学会sdkmanager也会让你在排查环境问题、写自动化任务时快人一步。比如同事报“SDK缺了build-tools 30.0.3”,你一行sdkmanager "build-tools;30.0.3"就解决了,不用让他打开IDE点点点。
最后分享一个我一直在用的小技巧:新机器完成SDK安装后,立刻执行一次yes | sdkmanager --licenses,然后全量安装你项目常用到的所有platform和build-tools版本。因为等你真的要用某个旧版本时再临时装,一方面慢,另一方面容易因为网络问题卡在一半。提前把许可交了、常用组件装了,后续所有构建都能直接从本地读取,那种顺手的感觉,试一次就知道。
本文还有配套的精品资源,点击获取