一文了解:Android cmdline-tools 版本与其最小JDK关系
关键词:Android cmdline-tools 历史版本、Android cmdline-tools 最小JDK版本、JDK 对应 major version、JDK LTS 信息
由于 JDK8 是一个常用的、较低的版本,因此只需关注 JDK8 及以上版本的运行情况。
Android 官网的 cmdline-tools 提供的最新版本是 19.0,也就是说,其 Runtime 的 JDK 版本必须是 JDK17 及以上。
更新日期:2025年05月23日
cmdline-tools 版本和最低 JDK
最终结论:(在 Mac 上,基于 JDK8 测试的结果)
cmdline-tools 版本 | 最低 JDK |
---|---|
19.0 / 17.0 / 16.0 / 13.0 / 12.0 / 11.0 | 17 |
10.0 / 9.0 | 11 |
8.0 / 7.0 / 6.0 | 8 |
扩展资料
cmdline-tools 历史版本下载
官网地址:https://developer.android.com/studio
cmdline-tools 版本 | 最低 JDK | Mac | Linux | Windows |
---|---|---|---|---|
19.0(latest) | 17 | commandlinetools-mac-13114758_latest.zip | commandlinetools-linux-13114758_latest.zip | commandlinetools-win-13114758_latest.zip |
17.0 | 17 | commandlinetools-mac-12700392_latest.zip | commandlinetools-linux-12700392_latest.zip | commandlinetools-win-12700392_latest.zip |
16.0 | 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、JDK LTS 信息
版本 | 周期 | major version | 积极支持 | 安全支持 |
---|---|---|---|---|
Java SE 25 | LTS | 69 (0x45 hex) | 2030年9月30日 | 2033年9月30日 |
Java SE 24 | 68 (0x44 hex) | |||
Java SE 23 | 67 (0x43 hex) | |||
Java SE 22 | 66 (0x42 hex) | |||
Java SE 21 | LST | 65 (0x41 hex) | 2028年9月30日 | 2031年9月30日 |
Java SE 20 | 64 (0x40 hex) | |||
Java SE 19 | 63 (0x3F hex) | |||
Java SE 18 | 62 (0x3E hex) | |||
Java SE 17 | LST | 61 (0x3D hex) | 2026年9月30日 | 2029年9月30日 |
Java SE 16 | 60 (0x3C hex) | |||
Java SE 15 | 59 (0x3B hex) | |||
Java SE 14 | 58 (0x3A hex) | |||
Java SE 13 | 57 (0x39 hex) | |||
Java SE 12 | 56 (0x38 hex) | |||
Java SE 11 | LST | 55 (0x37 hex) | 2023年9月30日 | 2026年9月30日 |
Java SE 10 | 54 (0x36 hex) | |||
Java SE 9 | 53 (0x35 hex) | |||
Java SE 8 | LST | 52 (0x34 hex) | 2022年3月31日 | 2030年12月31日 |
Java SE 7 | 51 (0x33 hex) | |||
Java SE 6 | 50 (0x32 hex) | |||
Java SE 5 | 49 (0x31 hex) | |||
JDK 1.4 | 48 (0x30 hex) | |||
JDK 1.3 | 47 (0x2F hex) | |||
JDK 1.2 | 46 (0x2E hex) | |||
JDK 1.1 | 45 (0x2D hex) |
资料来源:
- Java class file
- https://endoflife.date/java
- https://www.oracle.com/java/technologies/java-se-glance.html
检查流程
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 |
如果有什么建议或者问题可以随时联系我,共同探讨学习: