Android Gradle 插件 8.0.0 是一个主要版本,包含各种新功能和改进。
兼容性
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 8.0 | 8.0 | 要了解更多信息,请参阅 更新 Gradle。 |
SDK Build Tools | 30.0.3 | 30.0.3 | 安装 或 配置 SDK Build Tools。 |
NDK | N/A | 25.1.8937393 | 安装 或 配置 不同版本的 NDK。 |
JDK | 17 | 17 | 要了解更多信息,请参阅 设置 JDK 版本。 |
补丁版本
以下是 Android Gradle 插件 8.0 的补丁版本列表。
Android Gradle 插件 8.0.2 (2023年5月)
要查看 AGP 8.0.2 中修复的错误列表,请参阅 Android Studio 2022.2.1 已关闭的问题。
Android Gradle 插件 8.0.1 (2023年5月)
此小更新包含以下错误修复
已修复的问题 | |
---|---|
升级 AGP 7.2.2 -> 7.4.0 后出现错误:“表中没有具有给定 ID 的 VersionRequirement”
|
|
AGP 7.4.1 中 R8 NullPointerException 出现在 markTypeAsLive
|
|
[R8 4.0.53] Android 11 上的硬类验证失败
|
重大更改:模块级构建脚本中需要命名空间
您必须在模块级 build.gradle.kts
文件中设置命名空间,而不是清单文件。从 AGP 7.3 开始,您可以开始使用 namespace
DSL 属性。要了解更多信息,请参阅 设置命名空间。
迁移到命名空间 DSL 时,请注意以下问题
- 在某些情况下,以前版本的 AGP 会错误地从主命名空间或应用 ID 推断测试命名空间。如果发现您的项目的命名空间和测试命名空间相同,AGP 升级助手将阻止升级。如果升级被阻止,则需要手动更改
testNamespace
并相应地修改您的源代码。 - 更改测试命名空间后,您的代码可能能够编译,但运行时检测测试可能会失败。如果您的检测测试源代码引用了在您的
androidTest
和应用程序源代码中都定义的资源,则可能会发生这种情况。
更多信息,请参见问题 #191813691 评论 #19。
重大变更:构建选项默认值
从 AGP 8.0 开始,这些标志的默认值已更改,以提高构建性能。要获取有关调整代码以支持其中一些更改的帮助,请使用 AGP 升级助手(**工具 > AGP 升级助手**)。升级助手将指导您更新代码以适应新行为或设置标志以保留以前的行为。
标志 | 新的默认值 | 之前的默认值 | 备注 |
---|---|---|---|
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 默认情况下使用非 final 字段生成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 检测到在配置阶段进行配置解析,因为它会对 Gradle 配置时间产生负面影响,则会发出警告。 |
android.r8.failOnMissingClasses |
true |
如果使用 R8 的构建缺少类,AGP 8.0 将使构建失败,以确保更好的 DEX 优化。要解决此问题,您需要添加缺少的库或-dontwarn 保留规则。更多详情,请参见R8 压缩器中的缺少类警告。 |
android.testConfig.useRelativePath |
true |
启用在单元测试中使用 Android 资源、资产和清单的支持后,AGP 8.0 将生成一个test_config.properties 文件,其中仅包含相对路径。这确保 Android 单元测试始终可以使用 Gradle 构建缓存。 |
android.useNewJarCreator |
true |
AGP 在创建 JAR 文件时使用 Zipflinger 库来提高构建性能。 |
android.bundletool.includeRepositoriesInDependencyReport |
true |
启用在 AAB 和 APK 中添加 SDK 依赖项信息后,AGP 8.0 还将项目存储库列表添加到此信息中。要了解更多信息,请参见Play Console 的依赖项信息。 |
android.enableArtProfiles |
true |
现在始终生成基线配置文件。详情请参见基线配置文件。 |
android.enableNewResourceShrinker |
true |
默认情况下使用新的资源压缩器实现。新的资源压缩器包括对动态功能的支持。 |
android.enableSourceSetPathsMap |
true |
用于计算相对资源路径映射,以便 Gradle 构建更频繁地保持最新状态。 |
android.cacheCompileLibResources |
true |
现在可以默认缓存已编译的库资源,因为 Gradle 会跟踪相对于项目位置的资源文件。需要启用android.enableSourceSetPathsMap 。 |
android.disableAutomaticComponentCreation |
true |
AGP 8.0 默认情况下不创建 SoftwareComponent。相反,AGP 只为使用发布 DSL 配置为发布的变体创建 SoftwareComponents。 |
用于执行配置文件的新稳定标志
AGP 包含新的标志android.settings.executionProfile
。使用此标志可以覆盖SettingsExtension
中的默认执行配置文件。要了解更多信息,请参见settings 插件文档。
要预览实验性标志,请参见预览版发行说明。
不支持 Kotlin 延迟属性赋值
如果您正在为构建脚本使用 Gradle 的 Kotlin DSL,请注意 Android Studio 和 AGP 8.0 不支持使用=
运算符进行实验性属性赋值。有关此功能的更多信息,请参见发行说明和文档。
构建分析器任务类别
从 Android Studio Flamingo 开始,构建分析器对影响构建持续时间的任务具有新的默认视图。如果您的项目使用 AGP 8.0 或更高版本,构建分析器会按类别对任务进行分组,而不是单独显示任务。例如,特定于 Android 资源、Kotlin 或 Dexing 的任务将分组在一起,然后按构建持续时间排序。这使得很容易知道哪个类别对构建时间的影响最大。展开每个类别将显示相应任务的列表。要单独显示任务(不分组),请使用**按分组**下拉菜单。
新的 settings 插件
AGP 8.0.0-alpha09 引入了新的 settings 插件。settings 插件允许您在一个位置集中管理全局配置(应用于所有模块的配置),因此您无需在多个模块中复制和粘贴配置。此外,您可以使用 settings 插件创建工具*执行配置文件*,或运行工具的不同指令,并在它们之间切换。
要使用 settings 插件,请在settings.gradle
文件中应用该插件
apply plugin 'com.android.settings'
集中管理全局配置
要配置全局配置,请在settings.gradle
文件中使用新的android
块。这是一个示例
android {
compileSdk 31
minSdk 28
...
}
工具执行配置文件
settings 插件还允许您为某些工具创建执行配置文件。执行配置文件决定如何运行工具;您可以根据环境选择不同的执行配置文件。在执行配置文件中,您可以为工具设置 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"
}
}
要覆盖默认配置文件,请使用gradle.properties
文件中的android.experimental.settings.executionProfile
属性选择不同的配置文件
android.experimental.settings.executionProfile=high
您也可以使用命令行设置此属性,这允许您设置不同的工作流程。例如,如果您有持续集成工作流程,您可以使用命令行更改执行配置文件,而无需更改settings.gradle
文件
./gradlew assembleRelease \
-Pandroid.experimental.settings.executionProfile=ci
运行 AGP 8.0 需要 JDK 17
使用 Android Gradle 插件 8.0 构建应用程序时,现在需要 JDK 17 来运行 Gradle。Android Studio Flamingo 捆绑了 JDK 17 并默认配置 Gradle 使用它,这意味着大多数 Android Studio 用户无需对其项目进行任何配置更改。
如果您需要手动设置 AGP 在 Android Studio 中使用的 JDK 版本,则需要使用 JDK 17 或更高版本。
在独立于 Android Studio 使用 AGP 时,请通过设置JAVA_HOME
环境变量或-Dorg.gradle.java.home
命令行选项将其设置为 JDK 17 的安装目录来升级 JDK 版本。
已修复的问题
Android Gradle 插件 8.0.0
已修复的问题 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Android Gradle 插件 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint 集成 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
Android Gradle 插件 8.0.1
已修复的问题 | ||||
---|---|---|---|---|
Shrinker (R8) |
|
Android Gradle 插件 8.0.2
已修复的问题 | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|