尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Android SDK下载配置全指南:目录结构、sdkmanager与离线部署避坑
简介这是一份面向Android初学者的SDK资源包围绕开发环境搭建这一核心需求将tools、platform-tools、platforms、build-tools、licenses等官方目录集中整合帮助开发者在本地完成编译、调试与模拟器管理等基础配置尤其适合网络受限或需要离线备齐工具链的学员。压缩包约283.76MB内含2000余个文件构成以png资源、xml布局/配置、gif演示素材以及jar库、py脚本等为主同时保留大量css、html、ttf等辅助文件整体目录划分清晰可按需取用对应组件。目前已有782人学习下载。通过这份资源读者能够直观认识adb、fastboot、aapt等关键工具的文件位置理解platforms与build-tools在API编译、资源打包和APK签名环节中的作用结合SDK Manager的组件管理逻辑可少走弯路更快搭建起可运行的Android开发环境。1. Android SDK 下载为什么 zip 包解压后 adb 仍然找不到很多人下载 android sdk 时以为“拿到压缩包、解压、完事”结果打开文件夹发现根本没有 adb或者输入 sdkmanager 直接报错。我拆过不止一个这样的案例某开发者从官网拉回一个 commandlinetools 压缩包解压后放置路径少嵌套了一层工具连“Accept License”都弹不出来。实际上Android SDK 不是一个单文件工具而是一整套按目录职责拆分的组件集合platform-tools、build-tools、platforms、system-images 各管一段缺一个环节都会让后续构建出现“找不到 aapt”“SDK 组件缺失”的连锁反应。这套资源解决的正是“下载之后怎么摆、怎么配、怎么排错”的问题适合刚接触安卓构建的新手也适合需要在离线或内网环境里批量部署 SDK 的工程人员下面把每一步和踩过的坑写清楚。2. Android SDK 目录结构platforms、build-tools 与 system-images 的职责和版本对应2.1 从根目录认识六个关键文件夹拿到任意一份完整 SDK根目录下都会出现一批固定命名的目录。新手最常见的错误是只盯着一两个文件夹看忽略了目录之间的依赖关系。先把标准布局列出来后续安装和报错排查都会围绕这张表展开。目录名职责版本特征platforms存放各 API 级别的 android.jar编译时 SDK 版本由此决定以 android-34 这类命名build-tools存放 aapt2、zipalign、dx/d8 等构建可执行文件以 34.0.0 这类纯版本号命名platform-tools存放 adb、fastboot、sqlite3 等调试工具版本跟随发布通道整体更新cmdline-toolssdkmanager、avdmanager 等命令行入口解压后必须形成 latest/bin 结构system-images模拟器运行所需的系统镜像以 android-34/google_apis/x86_64 分层命名emulator模拟器主程序与相关库与 system-images 的 API 级别需匹配licenses记录已接受的许可协议哈希每个协议一个文件无扩展名判断一份 SDK 是否完整我的习惯是先看 platform-tools 里有没有 adb再看 cmdline-tools/latest/bin 里有没有 sdkmanager。这两个入口缺一个后面所有操作都走不通。很多网上下载的“绿色版 SDK”会在压缩包里删掉 platform-tools 以减小体积这种包解压后能用 IDE 构建但没法用命令行调试属于典型的“半套资源”。2.2 官方 zip 包与 IDE 内置版两种获取方式怎么选获取 SDK 组件有两条常见路径一是只下载命令行工具压缩包再通过 sdkmanager 按需拉取组件二是直接安装官方 IDE让它自带的 SDK 管理器把平台、构建工具、模拟器镜像一并装好。这两种方式在实际使用中差别很大。命令行工具包通常只有几十到一百多兆属于“骨架”必须联网执行 sdkmanager 才能长出完整组件适合服务器和 CI 环境。官方 IDE 内置版则是把 SDK 当成一个随装随用的附件图形界面里勾选 API 级别即可适合本机开发调试。我一般这样选本机开发用 IDE 内置版省去手动配路径部署到构建机上用命令行工具包加 sdkmanager 脚本因为无人值守环境下没人去点图形界面。需要注意的是IDE 内置版和命令行工具包不要混装在同一目录否则 IDE 会自动改写 SDK 目录里的配置文件导致 sdkmanager 拿到的组件清单与界面显示不一致。曾经有个项目就是两边各装了一份结果 IDE 构建用的 build-tools 版本和命令行打包用的版本互相覆盖翻车之后我把两套目录彻底分开才解决。2.3 许可证目录 licenses第一次运行卡在 y/n 的真相首次执行 sdkmanager 时命令会逐个列出需要接受的许可证协议要求输入 y 确认。很多人连按回车后以为已经同意再次运行却发现依然要求确认根源就在于协议内容没有被写入 licenses 目录。正常接受后SDK 根目录的 licenses 文件夹里会出现类似 android-sdk-license 的文件内容是该协议文本的哈希摘要。如果你删除或移动了 licenses 目录sdkmanager 会判定所有协议未授权即使组件已经下载到本地构建时也会报“You have not accepted the license agreements”。批量部署时最省事的做法是先在本机执行一遍sdkmanager --licenses然后把整个 licenses 目录连同 SDK 一起拷到目标机器省去每台机器重复确认的麻烦。补充一个容易忽略的点不同来源的 SDK 包其 licenses 文件哈希可能不同因为协议版本会随发布周期更新。若从旧机器拷贝 licenses 到新版 SDK部分新组件可能要求额外的协议授权此时再跑一次sdkmanager --licenses即可补齐不要拿旧文件强行覆盖新文件。3. 命令行安装sdkmanager 参数清单与 avdmanager 创建模拟器3.1 解压后先解决目录嵌套问题命令行工具压缩包解压后内部结构通常是cmdline-tools/bin/sdkmanager。如果你直接把整个 cmdline-tools 目录扔进 SDK 根目录运行时会出现工具找不到的情况。官方约定 cmdline-tools 必须再嵌套一层 latest 目录最终路径应为cmdline-tools/latest/bin/sdkmanager。# 假设压缩包解压到了 ~/cmdline-tools 目录下 mkdir -p $HOME/Android/Sdk/cmdline-tools/latest cp -r $HOME/cmdline-tools/bin $HOME/cmdline-tools/lib \ $HOME/Android/Sdk/cmdline-tools/latest/ # 验证目录结构 ls -l $HOME/Android/Sdk/cmdline-tools/latest/bin/这段操作的核心是把压缩包里的 bin 与 lib 整体搬进 latest 目录。sdkmanager 在启动时会基于自身所在路径推断 SDK 根目录标准结构下它会向上回溯三级找到包含 platforms 和 licenses 的目录作为 root如果缺少 latest 这一层回溯路径就断掉工具会直接退出。移动目录后先执行sdkmanager --list验证能列出版本清单说明结构正确。3.2 sdkmanager 安装卸载与过滤参数的写法sdkmanager 是命令行下管理组件的主要入口安装、列出、卸载都靠它核心参数分为组件标识与通道控制两类。# 安装指定平台与构建工具 sdkmanager --install platforms;android-34 \ build-tools;34.0.0 # 查看已安装组件过滤关键字 sdkmanager --list_installed | grep platforms; # 卸载不再使用的镜像 sdkmanager --uninstall system-images;android-34;google_apis;x86_64 # 强制使用 preview 通道便于提前验证开发版 API sdkmanager --channel3 --install platforms;android-35组件标识用分号分隔层级platforms;android-34表示 API 级别 34 的平台build-tools;34.0.0表示构建工具的具体版本号。通道参数 0 到 3 分别对应稳定版、测试版、预览版和开发版日常构建固定用稳定通道即可不要随意切到开发版否则后续 Gradle 插件可能因为读取到未稳定的 API 而解析失败。卸载命令也值得注意sdkmanager 卸载组件时会同步检查依赖关系比如卸载 platform-tools它会提醒你可能影响 adb 调用若你确实要清掉建议先确认没有其他进程占用 adb server 端口否则卸载后 adb 仍驻留在内存里造成“已删除但还能用”的假象。3.3 avdmanager 创建 AVD-n -k -d 参数的设置规则模拟器镜像是 SDK 下载里的重点很多开发者卡在“镜像下载了却创建不出可用虚拟机”这一步。avdmanager 创建 AVD 时最关键的是-k参数要填完整镜像标识-d参数决定设备外形配置。# 先安装系统镜像 sdkmanager --install system-images;android-34;google_apis;x86_64 # 创建 AVD指定设备定义与镜像标识 avdmanager create avd \ --name dev_phone_34 \ --package system-images;android-34;google_apis;x86_64 \ --device pixel_7 \ --force--device指定设备定义常见值有 pixel_7、pixel_6、medium_phone 等执行avdmanager list device可查看完整列表及其分辨率参数。--force表示同名 AVD 存在时覆盖不加该参数会直接询问是否覆盖并等待输入无人值守脚本里容易卡死在交互提示上。创建后在用户目录的.android/avd下会生成一个以设备名命名的文件夹包含 config.ini 与用户数据镜像若后续启动模拟器提示缺少 GPU 驱动可以在启动命令里加-gpu swiftshader_indirect软件渲染这与 SDK 本身下载无关属于模拟器运行环境问题。4. 镜像源与仓库清单下载慢和版本解析失败的根治法4.1 repository2-1.xmlSDK 如何知道每个版本存在SDK 组件下载慢、列表刷不出来很多人的第一反应是重试但根源往往在“仓库清单”的获取上。sdkmanager 启动时会访问远程仓库根目录下的 XML 文件这个清单里记录了每个组件的版本、大小、校验值以及下载相对路径。只有在清单成功解析后工具才发起真正的组件下载。这份 XML 文件内部结构按remotePackage节点分组每个节点包含path、revision和archives子节点。archives里的complete节点给出 zip 包 URL 与 sha1 校验值sdkmanager 下载完会核对这个哈希不匹配则判定文件损坏并触发重试。所以当你看到下载到一半失败或反复卡在“Fetching SDK components”时问题多半不是带宽而是清单本身或清单指向的镜像地址不可达。4.2 用 hosts 把仓库域名映射到境内镜像解决清单不可达的常见做法是修改 hosts 文件将 SDK 仓库域名解析到本地网络环境可访问的镜像地址。这个方案对 sdkmanager 完全透明因为工具自身逻辑没有变只是网络请求被路由到了更快的路径。# Windows 路径: C:\Windows\System32\drivers\etc\hosts # Linux/macOS 路径: /etc/hosts # 追加一行把仓库域名指向境内镜像 IP 192.168.1.10 dl.google.com # 刷新 DNS 缓存 # Windows: ipconfig /flushdns # Linux: sudo systemd-resolve --flush-caches改 hosts 需要注意镜像站点必须完整同步官方仓库目录否则工具解析到某个组件 URL 却拿不到对应文件会在安装阶段报 404。我一般先在一台机器上试装一个冷门组件验证镜像完整性比如system-images;android-33;google_apis;x86_64能装通说明镜像同步较全如果该组件缺失换另一个镜像地址再试。养成这个习惯后内网部署基本不会在“清单有了、组件却没有”这种灰色地带浪费时间。4.3 内网静态源把仓库与组件拆开放到本地 HTTP 服务对于有离线网络环境的团队更彻底的方案是把整个仓库拉下来做成内网静态源让每台机器通过 HTTP 访问本地 SDK 目录。这个做法不需要改造 sdkmanager 任何配置仅靠域名重定向即可完成。# 在内网服务器上同步仓库目录结构然后启动静态服务 cd /data/sdk_repo nohup python3 -m http.server 8000 \ --bind 0.0.0.0 /var/log/sdk_http.log 21 # 客户端机器的 hosts 指向内网服务器 # 192.168.1.10 dl.google.com静态服务启动后客户端访问http://192.168.1.10:8000/android/repository/repository2-1.xml就能拿到仓库清单组件 zip 也从这个源下载。关键问题是仓库根目录必须与官方 URL 的路径保持对齐也就是客户端请求/android/repository/...时服务器要能对应到同步目录里的android/repository/...。很多团队翻车在路径层级上同步时只拉了仓库根文件忘了把android/repository这两级目录也保留结果返回 404。验证方法是先在浏览器里打开 XML 地址确认内容能被解析再运行 sdkmanager --list。5. 常见问题与避坑记录五个故障的现象、根因与处置5.1 JAVA_HOME 指向 JDK 版本不对工具启动即崩现象刚解压好的 cmdline-tools 执行 sdkmanager.bat 或 sdkmanager窗口闪现后直接退出带-verbose参数才看到 UnsupportedClassVersionError 或类似报错。原因Android 命令行工具高版本要求 JDK 17 以上而机器上默认的 JAVA_HOME 指向的是旧版本 JDK 8 或 11。不同版本编译出的 class 文件格式不兼容工具类加载器在启动阶段就失败。解决显式指定 JDK 路径启动避免依赖全局环境变量。export JAVA_HOME/path/to/jdk-17 export PATH$JAVA_HOME/bin:$PATH sdkmanager --version检查sdkmanager --version能正常输出版本号就说明 JDK 位宽和版本都匹配。还遇到过 64 位系统装了 32 位 JDK 导致内存分配失败的案例建议统一使用 64 位 JDK 17。5.2 cmdline-tools 少一层 latest任何命令都不认现象sdkmanager 报Error: Could not find or load main class或直接提示找不到命令但文件明明存在。原因压缩包解压后的目录被直接放到了 SDK 根目录下形成cmdline-tools/bin/结构而工具要求必须是cmdline-tools/latest/bin/。SDK 组件管理器按固定深度扫描目录缺失 latest 层会让它把根目录识别错位。解决在 cmdline-tools 下新建 latest 目录把原 bin、lib 目录整体移入然后重开终端验证。确认结构后后续安装组件才会正确落到 SDK 根目录的 platforms、build-tools 等位置而不是被装进 cmdline-tools 内部。5.3 platform-tools 装错位置adb 版本始终不对现象执行 adb version 显示旧版本明明刚通过 sdkmanager 安装了新 platform-tools。用 IDE 调试时设备连接正常换到命令行却提示 adb server version 不匹配。原因机器上存在多份 adb比如系统 PATH 里有一个旧版 platform-tools而 sdkmanager 新装的那份在 SDK 根目录下命令解析优先级被旧路径抢占。解决用which adb查看当前解析到哪个路径然后调整 PATH 顺序确保 SDK 根目录下的platform-tools排在系统路径之前。若有两份 SDK 并存建议保留一份清理另一份的 platform-tools避免 adb server 被两个不同版本反复重启导致设备反复掉线。5.4 license 一直不通过许可证文件没落盘现象连续多次输入 ysdkmanager 依旧提示未接受协议日志里能看到协议名称但下次运行又重新询问。原因安装过程在写入 licenses 文件时没有权限或者 SDK 根目录是只读挂载。某些下载工具解压时会保留只读属性导致运行用户无法在该目录下创建新文件。解决先检查 SDK 根目录与 licenses 目录的写权限给当前用户赋权后再执行sdkmanager --licenses。如果包是 root 所有记得 chown 到普通用户不要在 root 下接受协议然后切回普通用户使用文件权限不匹配依然会触发同样问题。5.5 Gradle 要求 build-tools 版本与本地清单不一致现象Gradle 构建报SDK Build Tools revision XX.X.X is too low提示要求最低版本但本地已经装了一个看似更新的构建工具版本。原因Gradle 插件声明的 buildToolsVersion 是一个精确版本号本地 SDK 里没有该版本时即使存在更高版本也不会自动替代。常见的误判是“装个更高版总能往上兼容”但 Gradle 的版本匹配策略是精确查找不是范围匹配。解决查看项目build.gradle里的 buildToolsVersion 字段缺哪个版本就装哪个版本若项目未显式声明Gradle 使用默认版本需要在 SDK 内补装对应默认版本。另一种思路是修改项目配置统一到一个已安装版本但涉及多模块项目时改动面大且可能引入 Chrome 与原生代码的重编译不如直接安装目标版本省事。6. 进阶SDK 目录校验与离线分发让团队一次配好处处复用6.1 基于仓库清单的组件校验sdkmanager 本身下载时会对 zip 做 sha1 校验但本地已装好的组件是否损坏它并不会主动检测。我习惯用仓库 XML 里的哈希值做离线校验把 repository XML 中checksum的值与本地对应 zip 归档的 sha1 摘要进行比对能快速找出被杀毒软件误删或解压中断的坏文件。# 以 build-tools 为例计算本地归档摘要 sha1sum /data/sdk_repo/build-tools/34.0.0/34.0.0.zip # 再与 repository XML 中该版本的 checksum 比对 # 一致则组件完好不一致则重新下载该 zip6.2 分发时带上 licenses 与 platform-tools给团队分发 SDK 时我会打包整个根目录但会特别确认三个点licenses 目录存在且包含所有已接受协议platform-tools 是当前匹配版本cmdline-tools 保持 latest 结构不额外嵌套。曾经因为打包时滤掉了 licenses导致新机器上 IDE 一直弹协议确认框而协议框又因为网络受限刷不出来构建直接卡死。从那以后每次分发前都会强制走一遍sdkmanager --licenses确认输出中没有仍待接受的项目再打 tar 包。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

类别不平衡二分类实战:从评价指标到重采样与阈值移动

类别不平衡二分类实战:从评价指标到重采样与阈值移动

类别不平衡这个问题,我一开始真没拿它当回事。直到有一次在模拟项目X里做会员流失预测,训练集中正样本只占4%,我用默认参数跑了一个逻辑回归,准确率96.8%,当时还挺高兴。可把混淆矩阵打印出来一看,真正流失…

📅 2026/10/16 8:42:19
初步认识mqtt

初步认识mqtt

什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上&#xff0…

📅 2026/10/16 8:42:19
从CDH到Cloudera Manager:企业级Hadoop大数据平台部署全流程指南

从CDH到Cloudera Manager:企业级Hadoop大数据平台部署全流程指南

1. 为什么是CDH:平台选型的底层逻辑1.1 不是只有CDH一个选择先说说我个人的结论:如果你的团队从零开始搭大数据平台,CDH(Cloudera Distribution including Apache Hadoop)依然是一条稳妥、省事、可控的路。很多第一次接…

📅 2026/10/16 8:42:19
MORE NEWS

更多资讯

📰

K8s部署Redis生产级实战:持久化、高可用与Helm一站式避坑

聊到k8s安装redis,很多人第一反应是“拉个镜像、起个Deployment不就完事了”。真上手操作你会发现,光是把Pod跑起来只算幼儿园水平,数据不丢、重启不挂、主从能自动切换才是真正的考验。去年某项目上线前,我们所有服务共用一个Red…

📰

QCustomPlot瀑布图绘制详解:从QCPColorMap到实时滚动实现

简介:基于Qt与QCustomPlot的瀑布图实现demo,主要面向需要在Qt界面中展示数据变化过程的C开发者。demo通过随机数生成数据,完整演示了初始化绘图控件、配置坐标轴与刻度、创建QCPGraph对象、绘制矩形及连接线、调用replot刷新视图等关键流程&a…

📰

公共文化场馆携程评论爬取实战:反爬应对与文旅数据应用

1. 项目概述:为什么一个城市图书馆的评论数据值得被系统性采集?“广州图书馆——携程评论爬取”这个标题乍看有点违和——图书馆不是政务服务平台或公共文化场馆吗?怎么会出现在携程这样的旅游预订平台上?但正是这种“反常识”的组…

📰

用Go实现GitLab pre-receive钩子:强制规范commit message

简介:这是一份采用 Go 语言编写的 GitLab pre-receive(预接收)钩子示例资源,面向 GitLab 管理员、DevOps 工程师及对服务端钩子机制感兴趣的开发者。它演示了如何在代码推送前拦截提交,通过检查最新提交消息是否包含指…

📰

PySOT评估必装pysot-toolkit:Ubuntu 16.04编译安装与评测原理详解

1. 为什么必须单独安装 pysot-toolkit:PySOT 主库与评估工具的职责边界 很多人在跑通 PySOT 训练流程后,会自然地认为“模型训出来了,接下来直接 eval 就行”——结果在终端敲下 python tools/test.py 时,十有八九会遇到 Modul…

📰

福克斯刷机避坑:ELM327改AS-Built配置与备份恢复全攻略

简介:面向福特福克斯车主与汽车电子爱好者的电子控制单元刷机工具包,以ELM327诊断接口为硬件基础,可读取车辆电脑数据、分析参数并修改固件。压缩包共33个文件,集成FoCCCus主程序、19个vbf车型固件、12个动态链接库及1个xml配置说…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬