一文了解:Android cmdline-tools 版本与其最小JDK关系
关键词:Android cmdline-tools 历史版本、Android cmdline-tools 最小JDK版本、JDK 对应 major version、JDK LTS 信息
由于 JDK8 是一个常用的、较低的版本,因此只需关注 JDK8 及以上版本的运行情况。
cmdline-tools 版本和最低 JDK
最终结论:(在 Mac 上,基于 JDK8 测试的结果)
cmdline-tools 版本 | 最低 JDK |
---|---|
16.0 | 17 |
13.0 | 17 |
12.0 | 17 |
11.0 | 17 |
10.0 | 11 |
9.0 | 11 |
8.0 | 8 |
7.0 | 8 |
6.0 | 8 |
Android 官网的 cmdline-tools 提供的最新版本是16.0(截止2024年09月05日),也就是说,其 Runtime 的 JDK 版本必须是 JDK17 及以上。
检查流程
cmdline-tools 版本 | SdkManagerCliSettings | AndroidLocationsProvider | 最低 JDK |
---|---|---|---|
13.0 | 61 (JDK 17) | 55 (JDK 11) | 17 |
12.0 | 61 (JDK 17) | 55 (JDK 11) | 17 |
11.0 | 61 (JDK 17) | 55 (JDK 11) | 17 |
10.0 | 52 (JDK 8) | 55 (JDK 11) | 11 |
9.0 | 52 (JDK 8) | 55 (JDK 11) | 11 |
8.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
7.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
6.0 | 52 (JDK 8) | 52 (JDK 8) | 8 |
通过上表可以看出,在 cmdline-tools 内部,各个 Jar 的编译目标 JDK 版本存在不一致的情况。因此,在实际运行时,需要将所有 Jar 文件的编译目标 JDK 版本的最大值作为 cmdline-tools 运行时的最小的 JDK 版本。
1 | $ java -version |
由上述报错信息可知,com/android/prefs/AndroidLocationsProvider
要求最低使用 version 55.0(JDK 11)。
但是其他 class (比如 lib/sdklib/libsdkmanager_lib.jar
内的 com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings
)仍旧是 version 52.0 (JDK 8)。
这里的思路是:
直接切换到cmdline-tools对应版本,然后基于 runtime JDK = 8 的环境,执行 ./sdkmanager --version
检查是否报错,如报错,查看要求的最低 version 为多少。(低于JDK8的不再验证)
验证的脚本:majorVersion.sh
使用方法:./majorVersion.sh path/cmdline-tools/11.0
1 |
|
验证结果:
1 | # 11.0 |
扩展资料
cmdline-tools 历史版本下载
官网地址:https://developer.android.com/studio
cmdline-tools 版本 | 最低 JDK | Mac | Linux | Windows |
---|---|---|---|---|
16.0(latest) | 17 | commandlinetools-mac-12266719_latest.zip | commandlinetools-linux-12266719_latest.zip | commandlinetools-win-12266719_latest.zip |
13.0 | 17 | commandlinetools-mac-11479570_latest.zip | commandlinetools-linux-11479570_latest.zip | commandlinetools-win-11479570_latest.zip |
12.0 | 17 | commandlinetools-mac-11076708_latest.zip | commandlinetools-linux-11076708_latest.zip | commandlinetools-win-11076708_latest.zip |
11.0 | 17 | commandlinetools-mac-10406996_latest.zip | commandlinetools-linux-10406996_latest.zip | commandlinetools-win-10406996_latest.zip |
10.0 | 11 | commandlinetools-mac-9862592_latest.zip | commandlinetools-linux-9862592_latest.zip | commandlinetools-win-9862592_latest.zip |
9.0 | 11 | commandlinetools-mac-9477386_latest.zip | commandlinetools-linux-9477386_latest.zip | commandlinetools-win-9477386_latest.zip |
8.0 | 8 | commandlinetools-mac-9123335_latest.zip | commandlinetools-linux-9123335_latest.zip | commandlinetools-win-9123335_latest.zip |
下载地址的生成规则:https://dl.google.com/android/repository/文件名
JDK 对应 major version
1 | Java SE 21 = 65 (0x41 hex), |
资料来源:Java class file
JDK LTS 信息
- JDK 17(LTS)
- major version = 61
- 积极支持:2026年9月30日
- 安全支持:2029年9月30日
- JDK 11(LTS)
- major version = 55
- 积极支持:2023年9月30日
- 安全支持:2026年9月30日
- JDK 8(LTS)
- major version = 52
- 积极支持:2022年3月31日
- 安全支持:2030年12月31日
资料来源:
如果有什么建议或者问题可以随时联系我,共同探讨学习: