简介:面向 Android 应用开发者的 android-33 平台资源包,对应 Android 13(API 33)版本,适合需要在该版本下编译、调试与测试应用的中初级开发者,也适用于多版本 SDK 共存环境的搭建。压缩包共约 2000 个文件,以 1974 个 xml 资源定义文件为主,辅以 22 个 html 说明页面和 4 个 txt 文本,整体约 60.84MB,解压后放入 SDK 的 platforms 目录即可被 Android Studio 等 IDE 识别选用。已有 857 人学习下载,说明该版本在实际开发中仍有稳定需求。资源保留了平台层的系统库、API 定义与文档结构,便于开发者对照 API 33 的新特性进行兼容性适配、排查编译错误,并在目标设备或最低支持版本选型时快速切换验证,减少因平台缺失导致的构建失败与接口不匹配问题。
1. 从一台新机器装 android-33 说起:版本对不上,后面全是白费
上周给一台刚重装的开发机配 Android 环境,命令行里敲下sdkmanager "platforms;android-33",回车之后进度条卡在 47% 不动,等了十分钟报了个Warning: Failed to download ... Connection reset。换了个时间段重试,装是装上了,但compileSdkVersion 33一编译就提示找不到android.jar。这种翻车在 Android SDK 安装里太常见了——不是命令写错,而是版本、路径、依赖三者没对齐。android-33 对应 Android 13,是目前大量存量项目和第三方库还在用的编译目标,装它的人多半是要维护老工程或者跑某个只支持 33 的 Demo。这篇笔记按我实际装机的顺序走一遍:先列清环境,再装命令行工具,再配环境变量和 licenses,最后验证android.jar真的能被编译链读到。新手照着能走通,熟手可以重点看版本取舍和那几个容易写错的路径。
2. 装前把环境列清:JDK、磁盘和 SDK 目录怎么定
2.1 JDK 版本与 android-33 的匹配关系
android-33 的编译工具链对 JDK 有明确要求。AGP 7.4 到 8.0 这一档配 android-33 是主流组合,它们要求 JDK 11 或 17。我一般直接上 JDK 17,因为 AGP 8.x 已经不支持 JDK 11 以下的运行时,而 JDK 21 在部分老版本 Gradle 上又会报Unsupported class file major version。所以这台机器我装的是 Temurin 17:
# 确认当前 JDK 版本,输出里 major version 要是 17 java -version # 如果系统里有多个 JDK,用这个看实际生效的是哪个 readlink -f $(which java)java -version输出里的17.0.x是判断依据,readlink那行是为了排除「装了 17 但 PATH 还指向 8」的情况——这是最常见的假象,java -version看着对,但 Gradle 用的是另一个。Windows 上对应的是where java,然后去「系统属性 → 环境变量」里核对JAVA_HOME指向的目录和where结果是否一致。不一致就先改JAVA_HOME,再改 PATH 里%JAVA_HOME%\bin的顺序。
2.2 磁盘空间与 SDK 根目录的选法
android-33 单个 platform 大约 60MB,但加上 build-tools、platform-tools、emulator 和系统镜像,一个能用的 SDK 根目录起步就是 3 到 5GB。我习惯把 SDK 放在独立分区,路径里不带空格和中文:
# Linux/macOS 下建目录,路径保持纯英文 mkdir -p /opt/android-sdk # Windows 对应的是 D:\android-sdk 这类,别放 C:\Program Files路径带空格是血泪经验:sdkmanager本身能处理,但某些老版本 Gradle 插件在拼接local.properties里的sdk.dir时会截断,报SDK location not found。所以/opt/android-sdk或D:\android-sdk这种短路径最稳。目录权限也要注意,Linux 下如果用sudo装过一次,后面普通用户跑sdkmanager会因为没有写权限报Permission denied,我一般建完目录就chown给当前用户。
2.3 环境对照表:三种常见组合
| 组合 | JDK | AGP | Gradle | 适用场景 |
|---|---|---|---|---|
| 保守档 | 11 | 7.4 | 7.5 | 维护老工程,依赖库没升级 |
| 主流档 | 17 | 8.0 | 8.0 | 新老混合,android-33 编译目标 |
| 激进档 | 17 | 8.2+ | 8.2+ | 新项目,但部分老库会报错 |
保守档能跑但迟早要升,激进档容易在第三方库的build.gradle上翻车。我这次选主流档,因为目标工程用的是 AGP 8.0,JDK 17 是它的硬门槛。选组合的时候先看工程根目录build.gradle里的com.android.tools.build:gradle版本,再倒推 JDK,别反过来。
3. 下载与安装命令行工具:sdkmanager 的正确用法
3.1 拿到 cmdline-tools 并摆对目录结构
Android SDK 现在不推荐单独下 platform 包,统一走cmdline-tools里的sdkmanager。下载下来是一个 zip,解压后目录名是cmdline-tools,但sdkmanager要求它必须放在<SDK_ROOT>/cmdline-tools/latest/下面,否则会报Could not determine SDK root。这是新手第一个坑:
# 假设 zip 解压到了当前目录的 cmdline-tools 文件夹 cd /opt/android-sdk mkdir -p cmdline-tools # 把解压出来的内容挪到 latest 子目录 mv cmdline-tools latest mv latest cmdline-tools/latest # 最终结构应该是 /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager ls cmdline-tools/latest/bin/mv那两步看着绕,是因为解压出来的顶层目录本身就叫cmdline-tools,直接放进去会变成cmdline-tools/cmdline-tools,sdkmanager找不到source.properties就报错。判断标准很简单:ls cmdline-tools/latest/bin/能看到sdkmanager和avdmanager两个可执行文件,结构就对了。Windows 下同理,最终路径是D:\android-sdk\cmdline-tools\latest\bin\sdkmanager.bat。
3.2 用 sdkmanager 装 android-33 及配套组件
结构摆对之后,先列一下可安装的包,确认 android-33 的包名,再装:
# 列出所有可用包,grep 过滤出 platform 33 相关 /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --list | grep "platforms;android-33" # 安装 platform 33 和对应的 build-tools /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "build-tools;33.0.2" "platform-tools"--list那步别省,因为包名是platforms;android-33而不是android-33,少个前缀就报Warning: Failed to find package。build-tools;33.0.2是我配 android-33 时用的版本,33.0.x 系列都能配,0.2 是比较稳的一个。platform-tools是 adb 和 fastboot 所在,跑真机调试必须有。装的时候如果卡在下载,常见做法是加--verbose看具体卡在哪个包,再单独重试那个包,而不是整批重来。
3.3 接受 licenses:不点这个,编译照样失败
装完包不等于能用,sdkmanager装 platform 时会提示 license 未接受,非交互环境下会直接跳过。手动补一遍:
# 逐个接受 license,一路输入 y /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses # 验证 licenses 目录是否生成 ls /opt/android-sdk/licenses/--licenses会列出所有待接受的协议,输入y回车。生成的文件在licenses/目录下,android-sdk-license这个文件存在,说明 platform 的授权过了。如果这步漏了,Gradle 编译时会报Failed to install the following Android SDK packages ... licenses have not been accepted,报错信息里其实写明了要跑--licenses,但很多人扫一眼就过了。我一般装完立刻跑一遍,不等编译报错再回头。
4. 配置环境变量与 local.properties:三个最容易写错的路径
4.1 ANDROID_HOME 与 PATH 的写法
环境变量这块,ANDROID_HOME指向 SDK 根目录,PATH里加platform-tools和cmdline-tools/latest/bin:
# 写进 ~/.bashrc 或 ~/.zshrc,路径按实际改 export ANDROID_HOME=/opt/android-sdk export ANDROID_SDK_ROOT=$ANDROID_HOME export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/binANDROID_SDK_ROOT是旧变量名,新工具链认ANDROID_HOME,两个都设是为了兼容一些还在读旧变量的脚本。PATH里platform-tools要在cmdline-tools前面还是后面无所谓,但两个都得有,否则adb和sdkmanager只能用一个。改完source ~/.bashrc,然后echo $ANDROID_HOME确认生效。Windows 上在系统环境变量里加,注意别在路径末尾多写反斜杠,D:\android-sdk\和D:\android-sdk在某些工具里行为不一样。
4.2 local.properties 里的 sdk.dir 转义问题
工程根目录的local.properties是 Gradle 找 SDK 的第二条路,优先级高于环境变量。写法有个转义坑:
# Linux/macOS 直接写路径 sdk.dir=/opt/android-sdk # Windows 下反斜杠要转义,或者直接用正斜杠 sdk.dir=D\:\\android-sdkWindows 上D:\android-sdk直接写会被 properties 解析成D:android-sdk,因为\a被当转义符。要么双反斜杠,要么统一用D:/android-sdk。这个文件通常不进版本库,但团队里有人提交了带自己路径的版本,拉下来就报SDK location not found,排查时先看这个文件在不在、路径对不对。我一般把它加进.gitignore,每个环境自己生成。
4.3 验证环境变量是否真的被工具链读到
配完别急着编译,先用工具自检:
# sdkmanager 能列出已安装包,说明 ANDROID_HOME 生效 sdkmanager --list_installed | grep "platforms;android-33" # adb 能出版本号,说明 platform-tools 在 PATH 里 adb version--list_installed输出里出现platforms;android-33,说明 SDK 根目录和包都认到了。adb version能出版本号,说明platform-tools路径没问题。这两条都过,再进工程编译。如果sdkmanager报Could not determine SDK root,八成是cmdline-tools/latest结构不对或者ANDROID_HOME指错了层——指到cmdline-tools而不是 SDK 根目录,是第二个高频错误。
5. 避坑与排查:android-33 安装里最常见的五个翻车点
5.1 报错 Could not determine SDK root
现象:跑sdkmanager直接报Error: Could not determine SDK root,命令根本没执行。原因:cmdline-tools的目录层级不对,sdkmanager靠向上找source.properties定位根目录,层级错了就找不到。解决:确认结构是<SDK_ROOT>/cmdline-tools/latest/bin/sdkmanager,latest这一层不能少,也不能多套一层cmdline-tools。改完结构再跑,不用重装。
5.2 编译报 android.jar 找不到
现象:compileSdkVersion 33编译时报Failed to find target with hash string 'android-33'。原因:platform 包没装全,或者装到了另一个 SDK 根目录。解决:sdkmanager --list_installed看platforms;android-33在不在,不在就补装;在的话检查local.properties的sdk.dir和环境变量ANDROID_HOME是否指向同一个目录。两个路径不一致时,Gradle 优先用local.properties,很容易装在一个目录、编译找另一个。
5.3 licenses 未接受导致安装中断
现象:sdkmanager装 platform 时进度到一半退出,日志里有licenses have not been accepted。原因:非交互模式或首次安装没跑--licenses。解决:跑sdkmanager --licenses全部输入y,然后重跑安装命令。已经装了一半的包会续装,不用清空重来。这个坑在 CI 环境里尤其常见,脚本里得显式加一步yes | sdkmanager --licenses。
5.4 JDK 版本不匹配报 Unsupported class file
现象:Gradle 同步时报Unsupported class file major version 61或类似。原因:JDK 版本和 AGP 要求对不上,61 对应 JDK 17,报这个说明工具链期望更低或更高的版本。解决:按第 2 章的对照表核对 AGP 和 JDK,改JAVA_HOME指向匹配的 JDK,再清 Gradle 缓存./gradlew --stop后重试。别只改 PATH,JAVA_HOME才是 Gradle 读的那个。
5.5 下载卡住或 Connection reset
现象:sdkmanager下载某个包时卡住,最后报Connection reset。原因:网络抖动或包源响应慢,跟本地配置无关。解决:加--verbose看卡在哪个包,单独重试那个包;或者换个时间段重跑,已下载的部分会复用。我一般把安装命令拆成单包执行,哪个失败补哪个,比整批重来省时间。
6. 装完怎么验证:让 android-33 真正跑通一次编译
验证不能只看sdkmanager说装好了,得让编译链真的读到android.jar。最直接的办法是建一个最小工程,把compileSdkVersion设成 33 跑一次assembleDebug。工程不用完整,一个空的build.gradle加一个AndroidManifest.xml就够:
# 在临时目录建最小工程结构 mkdir -p /tmp/sdk-check/app/src/main cd /tmp/sdk-check # 写一个最小的 settings.gradle 和 build.gradle,compileSdk 指向 33build.gradle里关键三行是compileSdk 33、buildToolsVersion "33.0.2"、minSdk 21,然后./gradlew assembleDebug。能出BUILD SUCCESSFUL,说明 platform 33、build-tools、JDK、环境变量四条线全通了。这一步比任何--list_installed都可信,因为它走的是真实编译路径。
再补一个检查android.jar实际位置的命令:
# 确认 android-33 的 android.jar 存在且可读 ls -lh $ANDROID_HOME/platforms/android-33/android.jar # 看 jar 里的类,确认不是空包 unzip -l $ANDROID_HOME/platforms/android-33/android.jar | head -5ls能看到文件大小在 20MB 上下,unzip -l能列出android/app/Activity.class这类条目,说明包是完整的。如果ls报不存在,回到第 3 章补装;如果文件在但编译还报找不到,问题就在local.properties或ANDROID_HOME指向了别的目录。
最后跑一次adb devices确认 platform-tools 也通了,真机调试这条线才算闭环。我习惯把这三步——assembleDebug成功、android.jar可读、adb devices有输出——当成一套固定验收动作。从那以后我每次装完 SDK 都强制走一遍这个最小工程编译,不再信「装完没报错就是好了」这种玄学判断。希望帮到你。
本文还有配套的精品资源,点击获取