Android支持Java语言的标准

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 新特性:

  1. 模块系统 module-info.java(Java9)
  2. 虚拟线程 Virtual Thread(Java21)
  3. 模式匹配 for switch、原始类型模式(Java21+)
  4. 结构化并发、作用域值(Java21)
  5. 新的标准库类:java.util.concurrent.* 大量新增 API、HTTP Client、Vector API 等
  6. 反射相关新 API、foreign 内存 API

重点:语言语法 ≠ JDK 标准库 API哪怕语法能脱糖,只要调用了高版本 JDK 新增类 / 方法,

低版本手机运行直接报 NoClassDefFoundError / NoSuchMethodError。

相关推荐
G018_star sky♬1 分钟前
为什么java新建一个对象,需要obj o = new obj()这种写法
java·开发语言
三少爷的鞋2 分钟前
毁掉 Android 现代架构,只需要一个自定义的“FlowBus”
android
星恒讯工业路由器6 分钟前
工业网络设备选型:导轨式、机架式与车载式的部署差异
开发语言·网络·数据库·php·工业路由器·导轨式·车载式
2601_962885727 分钟前
如何用 Python 把多只股票对齐成一张宽表?
开发语言·python
蹊黎3 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
驭渊的小故事3 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
哦虎!8 小时前
【JavaEE】网络初识
java
for_ever_love__8 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
程序猿追9 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓9 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言