杰瑞科技汇

Android Java版本如何选择?

Android 平台主要使用 Java 8 语言特性,并逐步支持更新的 Java 版本(如 Java 11、17),但运行时环境并非标准的 Oracle JDK。

Android Java版本如何选择?-图1
(图片来源网络,侵删)

下面我们从几个层面来详细解释:


核心概念:Android 不使用标准的 Oracle JRE/JDK

首先要明确一个关键点:你电脑上安装的 Oracle JDK 或 OpenJDK,并不能直接用来运行 Android App,Android 有自己定制的运行时环境,主要是 ART (Android Runtime)

  • 过去 (Dalvik VM): 早期 Android 使用 Dalvik 虚拟机,它执行的是一种叫做 DEX (Dalvik Executable) 的格式文件,而不是标准的 Java .class 文件。
  • (ART VM): 从 Android 5.0 (Lollipop) 开始,ART 成为默认运行时,ART 仍然使用 DEX 文件,但其执行效率和垃圾回收机制比 Dalvik 有了巨大提升。

Android 的运行时是 ART,它是一个专门为移动设备优化的、非标准的 Java 虚拟机。


Android 开发中使用的 Java 语言版本

这才是开发者最关心的问题:在写 Android 代码时,我可以用哪个版本的 Java 语法和特性?

Android Java版本如何选择?-图2
(图片来源网络,侵删)

Android 的支持是分阶段的,并且与 Gradle 插件版本紧密相关。

Java 7 (默认支持,早期时代)

在很长一段时间里,Android 开发默认使用 Java 7,你写的代码、使用的库,都必须兼容 Java 7。

Java 8 的全面普及 (里程碑)

这是一个巨大的飞跃,从 Android Studio 3.0Gradle Plugin 3.0.0 开始,Android 官方正式支持 Java 8 的语言特性。

如何实现? Android Gradle Plugin (AGP) 引入了一个叫做 Jack and Jill 的工具链(后来被更优化的工具取代),它能够将 Java 8 的字节码(包括 lambda 表达式、Stream API 等)直接转换成 DEX 代码,从而绕过了传统编译流程的限制。

Android Java版本如何选择?-图3
(图片来源网络,侵删)

你可以放心地在 Android 项目中使用所有 Java 8 的特性:

  • Lambda 表达式 (() -> {})
  • Stream API (list.stream().filter()...)
  • 接口中的默认方法 (default void myMethod())
  • Optional
  • 新的日期时间 API (java.time.*)
  • 等等...

支持更新版本 (Java 11, 17, 21)

为了跟上现代 Java 的发展,Google 逐步支持了更新的版本。

  • 支持 Java 11:

    • AGP 4.2+Android Gradle Plugin 7.0+ 开始支持。
    • 你需要在模块的 build.gradle 文件中明确指定:
      android {
          compileOptions {
              sourceCompatibility JavaVersion.VERSION_11
              targetCompatibility JavaVersion.VERSION_11
          }
          // 或者使用新的 kts DSL
          // compileOptions {
          //     sourceCompatibility = JavaVersion.VERSION_11
          //     targetCompatibility = JavaVersion.VERSION_11
          // }
      }
    • 注意: 使用 Java 11 或更高版本,你通常需要配合 JDK 11 或更高版本来编译你的项目。
  • 支持 Java 17:

    • AGP 7.3+ 开始支持。
    • 这是目前(截至 2025-2025 年)推荐的、较新的版本,可以利用 Java 17 的许多性能和语法改进。
  • 实验性支持 Java 21:

    • AGP 8.1+ 开始实验性支持。
    • 这是最前沿的支持,包含了虚拟线程等新特性,但可能还不够稳定,建议在非关键项目中尝试。

如何在 Android Studio 中设置 Java 版本?

设置非常简单,主要在两个地方:

步骤 1: 指定项目的 JDK 版本

这是你的开发环境(Android Studio 本身)用来编译代码的 JDK。

  1. 打开 File -> Project Structure...
  2. SDK Location 标签页下,找到 Gradle 设置。
  3. Gradle JDK 下拉菜单中,选择一个已安装的 JDK(如 11, 17, 21),如果你没有,可以点击 Download 来下载。
  4. 点击 ApplyOK

步骤 2: 指定模块的编译版本

这是告诉 Android Gradle Plugin,你的代码源码是哪个 Java 版本,以及要编译成哪个兼容的版本。

  1. 打开你 App 模块的 build.gradle (或 build.gradle.kts) 文件。

  2. android { ... } 代码块内,添加或修改 compileOptions

    Groovy DSL:

    android {
        compileSdk 34 // 建议使用最新的 SDK
        // ... 其他配置
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }
    }

    Kotlin DSL (build.gradle.kts):

    android {
        compileSdk = 34
        // ... 其他配置
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_17
            targetCompatibility = JavaVersion.VERSION_17
        }
    }

总结表格

特性/版本 描述 关键点
运行时环境 ART (Android Runtime) 不是标准的 Oracle JRE/JDK,它执行的是 DEX 文件。
Java 7 早期默认版本 很久以前的标准,现在新项目基本不会用。
Java 8 现代 Android 开发的基石 从 AGP 3.0+ 开始全面支持,Lambda, Stream 等特性极大提升了开发体验。
Java 11 当前主流/推荐版本 从 AGP 7.0+ 开始支持,需要配置 compileOptions 并配合 JDK 11 使用。
Java 17 未来趋势/较新选择 从 AGP 7.3+ 开始支持,性能和语法更现代,新项目推荐使用。
Java 21 实验性支持 AGP 8.1+ 开始支持,可以尝试使用最新特性。

最佳实践建议

  1. 新项目: 直接使用 Java 17,这是目前兼顾了稳定性、性能和现代语法的最佳选择。
  2. 维护旧项目: 如果你的项目还在用 Java 8,完全没有问题,它依然非常强大和稳定,如果需要引入新库或利用新特性,再考虑升级到 Java 11 或 17。
  3. 保持同步: 确保你的 Gradle JDK 版本compileOptions 中指定的版本 以及 项目依赖的库 之间尽量保持兼容,避免不必要的编译错误。
  4. 关注兼容性: 虽然你可以在代码中使用高版本的 Java,但最终你的 App 仍然需要运行在旧版本的 Android 系统上。语言版本Android API 级别是两个独立的维度,使用高版本的 Java 主要是为了开发便利和性能,不会直接提升 App 的系统版本要求。
分享:
扫描分享到社交APP
上一篇
下一篇