Android最早使用的开发语言是Java,后面渐渐变成了Kotlin,但仍然支持Java。
手机上的 ART 虚拟机有独立的 Java 语言版本、标准库支持范围。
ART 运行时 Java 版本限制(最核心)
Android 各系统版本内置 ART 支持的 Java 标准:
表格
| Android 系统版本 | 支持 Java 语言标准 |
|---|---|
| Android 13 (API33) | Java 11 |
| Android 14/15 (API34/35) | Java 17(部分特性) |
| Android 16+ | 逐步完善 Java 17,暂不支持 Java 21 |
- Java 8 之前特性:全平台兼容(minSdk 全版本可用)
- Java 9~11:Android 7.0 (API24) 起可通过脱糖(desugar)向下兼容低版本
- Java 17:仅 API34+ 原生支持;低 minSdk 需要完整脱糖
- Java 21、23、24:原生 ART 完全不支持,无官方完整脱糖方案
脱糖(Desugar)的能力边界
AGP 的脱糖工具能把高版本 Java 语法转成低版本可运行字节码,但有上限,不是所有特性都能转:✅ 可脱糖向下兼容的:
- Lambda、接口默认方法、静态接口方法(Java8)
- var 局部变量、try-with-resources 增强、钻石运算符 <> 改进(Java9/10)
- 密封类、record 记录类、switch 模式匹配(Java16/17,新版 AGP 支持)
❌ 无法脱糖、完全不能用 的 JDK 新特性:
- 模块系统
module-info.java(Java9) - 虚拟线程 Virtual Thread(Java21)
- 模式匹配 for switch、原始类型模式(Java21+)
- 结构化并发、作用域值(Java21)
- 新的标准库类:
java.util.concurrent.*大量新增 API、HTTP Client、Vector API 等 - 反射相关新 API、foreign 内存 API
重点:语言语法 ≠ JDK 标准库 API哪怕语法能脱糖,只要调用了高版本 JDK 新增类 / 方法,
低版本手机运行直接报 NoClassDefFoundError / NoSuchMethodError。