支持更新的Java语言API - Android开发者 - Medium

作者:API传播员 · 2026-01-04 · 阅读时间:4分钟
本文介绍Android开发者如何通过Android Gradle插件4.0及以上版本启用Java 8+ API支持,包括脱糖技术实现跨设备兼容,并详细解析了新增API如java.time包、流和Optional类的应用,帮助开发者利用现代Java特性提升代码质量和兼容性。

支持更新的 Java 语言 API:Android 开发者指南

在开发需要处理时间计算的应用程序时,你可能会通过搜索找到 java.time 包的优秀示例。然而,当应用上线后,却可能因 API 崩溃而收到大量用户投诉。这是因为某些设备并未包含必要的类,而这些类在当时并不是 Android 的一部分。


Android 对 Java API 的持续更新

每次 Android 发布新版本时,都会从 OpenJDK 添加新的 Java API。例如,在 Android 11 中,新增了许多 API 支持,包括来自 OpenJDK 13 的 ListSetMapjava.time API 等。然而,为了让这些 API 能在旧设备上使用,Android 也提供了相应的解决方案。

如果你使用 Android Gradle 插件(AGP)4.0.0 或更高版本,现在可以在任何 Android 设备上使用数百个来自更新 OpenJDK 版本的 API。这些 API 的支持通过两种方式实现:

  1. 在 Android 11 中通过后台移植支持。
  2. 在旧设备上通过降级运行时支持。

什么是“脱糖”(Desugaring)?

Android Gradle 插件 4.0 为某些 API 提供了内置支持,包括第三方库的使用。通过一种称为“脱糖”的技术,这些 API 现在几乎可以在所有 Android 版本上使用。

脱糖的工作原理

  1. Java 编译:Java 源代码首先被编译为字节码。
  2. 字节码转换:工具链对应用及其依赖的第三方库执行字节码转换,将新的 API 转换为兼容的 dex 代码。
  3. 运行时支持:对缺失的运行时类,工具链会添加必要的 Java 8 运行时代码,并作为单独的 dex 库包含在应用中。

通过脱糖技术,一组 Java 8 API 可以在所有现有设备上运行,除了 API 21 级支持的并行设备。


如何启用 Java 8+ API 支持

要开始使用更新的 Java API,请按照以下步骤操作:

  1. 将 Android Gradle 插件更新到 4.0 或更高版本。
  2. 在模块的 build.gradle 文件中添加以下配置:
    • 设置 coreLibraryDesugaringEnabled 标志。
    • 将 Java 源和目标兼容性设置为 Java 8。
    • 添加 coreLibraryDesugaring 作为依赖项。
    • 启用多功能支持。

插件会编译一个单独的 DEX 文件,包含缺失 API 的实现,并将其包含在应用中。


新增 API 示例

1. ZonedDateTimeOffsetDateTime

  • ZonedDateTime:表示包含 LocalDateTimeZoneId 和解析的 ZoneOffset 的不可变日期时间。
    • 使用 ZoneId 设置时区(支持缩写或长文本形式)。
    • 可解析为任何时区,适合在不同设备或应用上下文中使用。
  • OffsetDateTime:适合将日期时间数据存储到数据库或其他需要序列化的场景。

两者的主要区别在于:

  • ZonedDateTime 适合显示时区敏感的日期时间数据。
  • OffsetDateTime 更适合存储和序列化数据。

2. 流(Streams)

流允许对集合执行函数式操作,具有以下特点:

  • 不存储数据或修改底层数据结构。
  • 提供更好的代码可读性。
  • 支持大量内置的中间操作和终端操作。
    • 中间操作:懒惰执行,总是返回新流。
    • 终端操作:渴望执行,完成数据源遍历后流不可再用。

流在处理大型数据源时表现尤为出色。

3. java.util 包的新特性

  • 比较器(Comparator):通过方法句柄和 Lambda 表达式,简化了比较器的编写。
  • Optional:用于避免空引用问题,支持 OptionalIntOptionalLongOptionalDouble 等原始类型。
    • 使用实用方法处理值是否“可用”或“不可用”。

4. 并发更新

  • AtomicIntegerAtomicLongAtomicReference:在 java.util.concurrent.atomic 包中新增了方法。
  • ConcurrentHashMap:修复了 API 21 和 22 中的 bug。通过脱糖库,应用会使用修复后的实现。

总结

通过升级到支持 Java 8+ API 的 Android Gradle 插件,你可以充分利用现代语言特性,如流、Optional 和其他新时代 API。这些特性不仅能帮助你编写更少的代码,还能减少错误的引入。

请务必查看支持的完整 Java 8+ API 列表,以便在项目中充分利用这些更新。

原文链接: https://medium.com/androiddevelopers/support-for-newer-java-language-apis-bca79fc8ef65