Android Gradle 插件 8.0.0(2023 年 4 月)

Android Gradle 插件 8.0.0 是一个主要版本,包含各种新的 功能和改进。

兼容性

最低版本 默认版本 备注
Gradle 8.0 8.0 如需了解详情,请参阅更新 Gradle
SDK Build Tools 30.0.3 30.0.3 安装配置 SDK Build Tools。
NDK 不适用 25.1.8937393 安装配置其他版本的 NDK。
JDK 17 17 如需了解详情,请参阅设置 JDK 版本

补丁版本

以下是 Android Gradle 插件的补丁版本列表 8.0。

Android Gradle 插件 8.0.2(2023 年 5 月)

如需查看 AGP 8.0.2 中修复的 bug 列表,请参阅 Android Studio 2022.2.1 已解决的问题

Android Gradle 插件 8.0.1(2023 年 5 月)

本次要更新包含以下 bug 修复:

修复的问题
Error:"No VersionRequirement with the given id in the table" after upgrading AGP 7.2.2 -> 7.4.0
markTypeAsLive AGP 7.4.1 发生 R8 NullPointerException
[R8 4.0.53] Android 11 发生类验证失败的严重问题

重大更改:模块级构建脚本中需要命名空间

您必须在模块级 build.gradle.kts 文件中设置命名空间,而不是 比清单文件更方便您可以开始使用 namespace DSL 属性了 从 AGP 7.3 开始如需了解详情,请参阅 设置命名空间

迁移到命名空间 DSL 时,请注意以下问题:

  • 旧版 AGP 从主命名空间推断测试命名空间,或者 应用 ID,在某些情况下是不正确的。AGP 升级助理会阻止 如果系统发现项目的主命名空间和测试命名空间 一样。如果升级受阻,您需要手动更改 testNamespace 并相应地修改源代码
  • 更改测试命名空间后,您的代码可能会 但插桩测试会在运行时失败。如果您 插桩测试源代码引用 androidTest 和应用来源。

如需了解详情,请参阅 问题 191813691 评论 #19

重大变更:构建选项默认值

从 AGP 8.0 开始,这些标志的默认值已更改为 提升构建性能如需获取帮助调整代码以支持 请使用 AGP 升级助理 (Tools > AGP Upgrade Assistant)。升级助理将引导您完成 更新代码以适应新行为或设置要保留的标志 之前的行为

标志 新的默认值 之前的默认值 备注
android.defaults.buildfeatures.buildconfig false true 默认情况下,AGP 8.0 不会生成 BuildConfig。您需要 在需要的项目中使用 DSL 指定此选项。
android.defaults.buildfeatures.aidl false true AGP 8.0 默认不启用 AIDL 支持。你需要指定 在所需的项目中使用 DSL 使用此选项。此标记是 计划从 AGP 9.0 中移除。
android.defaults.buildfeatures.renderscript false true AGP 8.0 默认不会启用 RenderScript 支持。您需要 在所需的项目中使用 DSL 指定此选项。这个 计划从 AGP 9.0 中移除。
android.nonFinalResIds true false AGP 8.0 通过以下方式生成包含非最终字段的 R 类: 默认值。
android.nonTransitiveRClass true false AGP 8.0 会为R 仅限当前模块。
android.enableR8.fullMode true false AGP 8.0 默认启用 R8 完整模式。有关详情,请参阅 R8 完整模式

重大变更:强制执行构建选项值

从 AGP 8.0 开始,您将无法再更改这些标志的值。如果 您在 gradle.properties 文件中指定它们时,系统会忽略该值,并发送 AGP 即可打印警告。

标志 强制执行的值 备注
android.dependencyResolutionAtConfigurationTime.warn true 如果 AGP 8.0 在运行期间检测到配置解析,则会发出警告 配置阶段,因为它会对 Gradle 配置产生负面影响 次。
android.r8.failOnMissingClasses true 如果缺少类,AGP 8.0 会使使用 R8 的 build 失败 以确保更好地优化 DEX。要解决此问题,您需要将 缺少库或 -dontwarn 条保留规则。如需了解更多详情, 请参阅 R8 缩减器中的“缺少类”警告
android.testConfig.useRelativePath true 当在下列情况下支持使用 Android 资源、资产和清单时 启用单元测试后,AGP 8.0 会生成 仅包含相对路径的 test_config.properties 文件 路径。这样可以确保 Android 单元测试始终可以使用 Gradle 构建缓存
android.useNewJarCreator true 在创建 JAR 文件时,AGP 使用 Zipflinger 库进行改进 构建性能
android.bundletool.includeRepositoriesInDependencyReport true 启用在 AAB 和 APK 中添加 SDK 依赖项信息后, AGP 8.0 还在此信息中添加了项目代码库列表。接收者 了解详情,请参阅 Play 管理中心的依赖项信息
android.enableArtProfiles true 现在,基准配置文件一律会生成。如需了解详情,请参阅基准配置文件
android.enableNewResourceShrinker true 默认情况下,使用新的资源缩减器实现。新的 资源缩减器支持动态功能。
android.enableSourceSetPathsMap true 用于计算相对资源路径映射,因此 Gradle 构建 更新频率会更高。
android.cacheCompileLibResources true 现在,可以默认缓存已编译的库资源,因为 Gradle 会跟踪相对于项目位置的资源文件。要求 要启用“android.enableSourceSetPathsMap”权限。
android.disableAutomaticComponentCreation true 默认情况下,AGP 8.0 不会创建 SoftwareComponent。相反,AGP 会创建 仅适用于已配置为发布的变体的 SoftwareComponents 使用发布版 DSL。

执行配置文件的新稳定标志

AGP 包含新标志 android.settings.executionProfile。使用此标记 替换默认执行配置文件 SettingsExtension。 如需了解详情,请参阅设置插件文档

如需预览实验性标记,请参阅 预览版版本说明

不支持 Kotlin 延迟属性分配

如果您针对 build 脚本使用 Gradle 的 Kotlin DSL,请注意,Android Studio 和 AGP 8.0 不支持使用 = 运算符。有关此功能的详细信息,请参阅 版本说明文档

Build Analyzer 任务类别

从 Android Studio Flamingo 开始,Build Analyzer 针对 影响构建时长的任务。如果您的项目使用 AGP 8.0 或更高版本, Build Analyzer 按任务分组,而不是单独显示任务 类别。例如,特定于 Android 资源、Kotlin 或 Dexing 的任务 组合在一起,然后按构建时长排序。这样,您就可以轻松 知道哪个类别对构建时间影响最大。扩展各个类别 会显示相应任务的列表。如需逐个显示任务,请执行以下操作: 而不分组,请使用分组依据下拉菜单。

Build Analyzer 任务类别。

全新设置插件

AGP 8.0.0-alpha09 引入了新的设置插件。通过设置插件, 您可以将全局配置(适用于所有模块的配置)集中到 这样您就无需在多个位置复制和粘贴配置 模块。此外,您还可以使用设置插件创建 执行配置文件或有关如何运行工具的不同说明,以及 在这些元素之间切换。

如需使用设置插件,请在 settings.gradle 文件中应用该插件:

apply plugin 'com.android.settings'

集中全局配置

如需配置全局配置,请在android settings.gradle 文件。示例如下:

android {
  compileSdk 31
  minSdk 28
  ...
}

工具执行配置文件

借助设置插件,您还可以为某些工具创建执行配置文件。一个 执行配置文件决定了工具的运行方式;您可以选择不同的 具体取决于环境。在执行配置文件中 可以为工具设置 JVM 参数,并将其配置为在单独的进程中运行。 目前,只有 支持 R8 工具

创建执行配置文件并在 settings.gradle 文件,如以下示例所示:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

要覆盖默认配置文件,请使用 android.experimental.settings.executionProfile 属性(位于 gradle.properties 文件:

android.experimental.settings.executionProfile=high

您还可以使用命令行设置此属性,这样就可以 不同工作流。例如,如果您有一个持续集成工作流 则可以使用命令行来更改执行配置文件 更改 settings.gradle 文件:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

需要 JDK 17 才能运行 AGP 8.0

使用 Android Gradle 插件 8.0 构建应用时,现在需要 JDK 17 来运行 Gradle。Android Studio Flamingo 捆绑了 JDK 17 并将 Gradle 配置为 默认使用该应用,这意味着大多数 Android Studio 用户无需进行 更改项目的任何配置。

如果您需要手动设置 JDK 版本 则需要使用 JDK 17 或更高版本。

使用独立于 Android Studio 的 AGP 时,请通过以下命令升级 JDK 版本 设置JAVA_HOME 环境变量-Dorg.gradle.java.home 命令行选项 复制到您的 JDK 17 安装目录中。