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 脚本中必须包含命名空间
您必须在模块级 build.gradle.kts
文件中设置命名空间,而不是在清单文件中设置。从 AGP 7.3 开始,您可以使用 namespace
DSL 属性。如需了解详情,请参阅设置命名空间。
迁移到命名空间 DSL 时,请注意以下问题:
- 在某些情况下,旧版 AGP 会从主命名空间或应用 ID 推断测试命名空间,但有时会推断错误。如果 AGP 升级助理发现项目的主命名空间和测试命名空间相同,则会阻止升级。如果升级被阻止,您需要手动更改
testNamespace
并相应地修改源代码。 - 更改测试命名空间后,您的代码可能会编译成功,但插桩测试会在运行时失败。如果插桩测试源代码引用了在
androidTest
和应用源代码中均定义的资源,就可能会发生这种情况。
如需了解详情,请参阅问题 191813691 的第 19 条评论。
重大变更:build 选项默认值
从 AGP 8.0 开始,这些标志的默认值已更改,以提升 build 性能。如需获取有关调整代码以支持其中一些更改的帮助,请使用 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 全模式。 |
重大变更:强制执行 build 选项值
从 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 keep 规则。如需了解详情,请参阅 R8 缩减器中的“缺少类”警告。 |
android.testConfig.useRelativePath |
true |
启用在单元测试中使用 Android 资源、资产和清单的支持后,AGP 8.0 会生成一个仅包含相对路径的 test_config.properties 文件。这样可确保 Android 单元测试始终可以使用 Gradle 构建缓存。 |
android.useNewJarCreator |
true |
AGP 在创建 JAR 文件时使用 Zipflinger 库,以提高 build 性能。 |
android.bundletool.includeRepositoriesInDependencyReport |
true |
启用在 AAB 和 APK 中添加 SDK 依赖项信息后,AGP 8.0 还会向此信息添加项目代码库列表。如需了解详情,请参阅 Play 管理中心的依赖项信息。 |
android.enableArtProfiles |
true |
现在,系统始终会生成基准配置文件。如需了解详情,请参阅基准配置文件。 |
android.enableNewResourceShrinker |
true |
默认使用新的资源缩减器实现。新的资源缩减器支持动态功能。 |
android.enableSourceSetPathsMap |
true |
用于计算相对资源路径映射,以便 Gradle build 更频繁地保持最新状态。 |
android.cacheCompileLibResources |
true |
编译后的库资源现在可以默认缓存,因为 Gradle 会跟踪相对于项目位置的资源文件。需要启用 android.enableSourceSetPathsMap 。 |
android.disableAutomaticComponentCreation |
true |
AGP 8.0 默认情况下不会创建 SoftwareComponent。而是仅为配置为使用发布 DSL 进行发布的变体创建 SoftwareComponent。 |
执行配置文件的新稳定标志
AGP 包含新标志 android.settings.executionProfile
。使用此标志可替换 SettingsExtension
中的默认执行配置文件。如需了解详情,请参阅设置插件文档。
如需预览实验性标志,请参阅预览版版本说明。
不支持 Kotlin 延迟属性赋值
如果您使用的是 Gradle 的 Kotlin DSL 来编写 build 脚本,请注意,Android Studio 和 AGP 8.0 不支持使用 =
运算符进行实验性属性分配。如需详细了解此功能,请参阅版本说明和文档。
Build Analyzer 任务类别
从 Android Studio Flamingo 开始,Build Analyzer 针对影响 build 时长的任务提供了一个新的默认视图。如果您的项目使用的是 AGP 8.0 或更高版本,Build Analyzer 会按类别对任务进行分组,而不是单独显示任务。例如,特定于 Android 资源、Kotlin 或 Dexing 的任务会分组在一起,然后按 build 时长排序。这样,您就可以轻松了解哪个类别对 build 时间的影响最大。展开每个类别后,系统会显示相应任务的列表。如需单独显示任务而不进行分组,请使用分组依据下拉菜单。
新的设置插件
AGP 8.0.0-alpha09 引入了新的设置插件。借助设置插件,您可以将适用于所有模块的全局配置集中在一个位置,这样就不需要在多个模块中复制和粘贴配置。此外,您还可以使用设置插件创建工具执行配置文件(即有关如何运行工具的不同指令),并在这些配置文件之间切换。
如需使用设置插件,请在 settings.gradle
文件中应用该插件:
apply plugin 'com.android.settings'
集中管理全局配置
如需配置全局配置,请在 settings.gradle
文件中使用新的 android
块。示例如下:
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"
}
}
如需替换默认配置,请使用 gradle.properties
文件中的 android.experimental.settings.executionProfile
属性选择其他配置:
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 配置为默认使用 JDK 17,这意味着大多数 Android Studio 用户不需要对项目进行任何配置更改。
如需手动设置 JDK 版本供 Android Studio 中的 AGP 使用,您需要使用 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 集成 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
缩减器 (R8) |
|
Android Gradle 插件 8.0.1
已修复的问题 | ||||
---|---|---|---|---|
缩减器 (R8) |
|
Android Gradle 插件 8.0.2
已修复的问题 | |||||
---|---|---|---|---|---|
缩减器 (R8) |
|