本页面包含 Android Gradle 插件 (AGP) 预览版的版本说明。
Android Gradle 插件 9.0
Android Gradle 插件 9.0 是 AGP 的一个全新主要版本,带来了 API 和行为变更。
如需更新到 Android Gradle 插件 9.0.0-alpha04,请在 Android Studio Narwhal 4 Feature Drop | 2025.1.4 中使用 Android Gradle 插件升级助理。
AGP 升级助理有助于在升级项目时尽可能保留现有行为,即使您尚未准备好采用 AGP 9.0 中的所有新默认设置,也可以将项目升级为使用 AGP 9.0。
兼容性
Android Gradle 插件 9.0.0-alpha04 支持的最高 Android API 级别为 API 级别 36。
Android Gradle 插件 9.0.0-alpha04 需要 Gradle 9.0.0。
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | 如需了解详情,请参阅更新 Gradle。 |
SDK Build Tools | 36.0.0 | 36.0.0 | 安装或配置 SDK Build Tools。 |
NDK | 不适用 | 28.2.13676358 | 安装或配置其他版本的 NDK。 |
JDK | 17 | 17 | 如需了解详情,请参阅设置 JDK 版本。 |
内部 DSL 实现和已弃用的变体 API 现在需要明确选择启用
Android Gradle 插件现在具有已定义的 API 接口,支持的 API 定义在 com.android.tools.build:gradle-api
Maven 制品中。
为了与现有的二进制插件和 build 脚本兼容,在 AGP 8.13 及更低版本中,默认情况下仍会公开定义该 API 接口之前的 DSL 实现。这样一来,Gradle 插件和 build 脚本中的代码就可以访问 DSL 的内部实现详细信息以及已弃用的 android.applicationVariants
、android.libraryVariants
、android.testVariants
和 android.unitTestVariants
API,这些 API 将在 2026 年的 AGP 10 中移除。
为了让这种过渡更加明显,从 Android Gradle 插件 9.0.0-alpha04 开始,默认情况下无法访问旧版变体 API 和内部 DSL。
您可以在 gradle.properties
中设置 android.newDsl=false
,重新选择使用已弃用的 API。
在 9.0 Alpha 版系列期间,我们会联系插件作者,帮助他们调整并发布与新模式完全兼容的插件,并增强 Android Studio 中的 AGP 升级助理,以引导您完成迁移。
内置 Kotlin
Android Gradle 插件 9 包含用于编译 Kotlin 的内置支持,取代了单独应用的 Kotlin 插件。这简化了与 AGP 的集成,避免使用已废弃的 API,并在某些情况下提高了性能。
Android Gradle 插件 9 在运行时依赖于 Kotlin Gradle 插件 2.2.0,这是内置 Kotlin 支持所需的最低版本。
您可以通过设置 android.builtInKotlin=false
来选择停用内置 Kotlin。
如果您已选择不使用新版 Kotlin Gradle 插件,但仍需使用旧版,则可以强制降级
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
行为变更
Android Gradle 插件 9.0 具有以下新行为:
行为 | 建议 |
---|---|
Android Gradle 插件 9.0 默认使用 NDK 版本 r28c 。
|
请考虑明确指定要使用的 NDK 版本。 |
Android Gradle 插件 9.0 默认要求库的消费者使用相同或更高的编译 SDK 版本。 |
使用库时,请使用相同或更高的编译 SDK。
如果无法实现,或者您想为所发布库的消费者提供更多时间来切换,请明确设置 AarMetadata.minCompileSdk 。
|
AGP 9.0 包含对以下 Gradle 属性默认值的更新。 这样一来,您就可以选择在升级时保留 AGP 8.13 的行为:
属性 | 功能 | 从 AGP 8.13 更改为 AGP 9.0 | 建议 |
---|---|---|---|
android.newDsl |
使用新的 DSL 接口,而不公开 android 代码块的旧版实现。这也意味着,旧版变体 API(例如 android.applicationVariants )将无法再访问。
|
false → true |
您可以通过设置 android.newDsl=false 来选择停用。当项目使用的所有插件和 build 逻辑都兼容时,移除选择停用。 |
android.builtInKotlin |
在 Android Gradle 插件中直接编译 Kotlin 代码,无需使用 org.jetbrains.kotlin.android 插件。
|
false → true |
如果可以,请移除 org.jetbrains.kotlin.android 插件的使用,采用内置 Kotlin。
如果不想参与,请通过设置 android.builtInKotlin=false 选择退出
|
android.uniquePackageNames |
强制要求每个库都有不同的软件包名称。 | false → true |
为项目中的所有库指定唯一的软件包名称。 如果无法实现,您可以在迁移时停用此标志。 |
android.dependency.useConstraints |
控制配置之间依赖项约束的使用。 AGP 9.0 中的默认值为 false ,该值仅在应用设备测试 (AndroidTest) 中使用限制。
将此值设置为 true 将恢复为 8.13 版的行为。
|
true → false |
除非需要,否则不要在所有地方都使用依赖项限制。 接受此标志的新默认值还可以在项目导入过程中启用优化,从而缩短包含多个 Android 库子项目的 build 的导入时间。 |
aandroid.enableAppCompileTimeRClass |
针对非最终 R 类编译应用中的代码,使应用编译与库编译保持一致。 这有助于提高增量性,并为将来对资源处理流程进行性能优化奠定基础。 |
false → true |
许多项目只需采用新行为,无需更改源代码。 如果 R 类字段用于需要常量的位置(例如 switch 语句),请重构为使用链式 if 语句。 |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
使用编译 SDK 版本作为应用和测试中目标 SDK 版本的默认值。 在此变更之前,目标 SDK 版本会默认设置为最低 SDK 版本。 |
false → true |
为应用和测试显式指定目标 SDK 版本。 |
android.onlyEnableUnitTestForTheTestedBuildType |
仅为测试的 build 类型创建单元测试组件。 在默认项目中,这会生成一个用于调试的单元测试,而之前的行为是运行用于调试或发布的单元测试。 |
false → true |
如果您的项目不需要同时针对调试和发布运行测试,则无需进行任何更改。 |
android.proguard.failOnMissingFiles |
如果 AGP DSL 中指定的任何 keep 文件在磁盘上不存在,则构建会因错误而失败。在此变更之前,文件名中的拼写错误会导致文件被静默忽略。 | false → true |
移除所有无效的 ProGuard 文件声明 |
android.r8.optimizedResourceShrinking |
通过同时考虑类和 Android 资源,允许 R8 保留较少的 Android 资源。 | false → true |
如果项目的保留规则已完整设置,则无需进行任何更改。 |
android.r8.strictFullModeForKeepRules |
允许 R8 通过在保留类时不会隐式保留默认构造函数来减少保留的内容。
也就是说,-keep class A 不再意味着 -keep class A { <init>(); } |
false → true |
如果项目的保留规则已完整设置,则无需进行任何更改。
在项目的保留规则中,将 -keep class A 替换为 -keep class A { <init>(); } ,以保留默认构造函数。
|
android.defaults.buildfeatures.shaders |
在所有子项目中启用着色器编译 | true → false |
仅在包含要编译的着色器的子项目中启用着色器编译,方法是在这些项目的 Gradle build 文件中设置以下内容:
android { buildFeatures { shaders = true } } |
已移除的功能
Android Gradle 插件 9.0 移除了以下功能:
- 嵌入式 Wear OS 应用支持
AGP 9.0 移除了对嵌入式 Wear OS 应用的支持,Play 中不再支持该功能。这包括移除wearApp
配置和AndroidSourceSet.wearAppConfigurationName
DSL。如需了解如何将应用发布到 Wear OS,请参阅分发到 Wear OS 平台。 androidDependencies
和sourceSets
报告任务
更改了 DSL
Android Gradle 插件 9.0 包含以下重大 DSL 变更:
- 移除了
CommonExtension
的形参化。 就其本身而言,这只是一个源代码级破坏性变更,旨在帮助避免未来出现源代码级破坏性变更,但这也意味着 DSL 块方法需要从CommonExtension
移至ApplicationExtension
、LibraryExension
、DynamicFeatureExtension
和TestExtension
。
移除了 DSL
Android Gradle 插件 9.0 移除了以下内容:
AndroidSourceSet.jni
,因为该功能无法正常运行。AndroidSourceSet.wearAppConfigurationName
,因为这与已移除的嵌入式 Wear OS 应用支持有关。BuildType.isRenderscriptDebuggable
,因为该功能无法正常运行。DependencyVariantSelection
。它已替换为DependencySelection
,后者以kotlin.android
的形式公开Installation.installOptions(String)
。它已被Installation.installOptions
的可变属性取代。VariantBuilder.targetSdk
和targetSdkPreview
,因为它们在库中没有意义。请改用GeneratesApkBuilder.targetSdk
或GeneratesApkBuilder.targetSdkPreview
。实验性但从未稳定过的
PostProcessing
块。ProductFlavor.setDimension
,已由dimension
属性取代LanguageSplitOptions
,该属性仅对已弃用的 Google Play 免安装体验有用。Variant.unitTest
,因为它不适用于com.android.test
插件。unitTest
可用于扩展HasUnitTest
的VariantBuilder
子类型。VariantBuilder.enableUnitTest
,因为它不适用于com.android.test
插件。enableUnitTest
可用于扩展HasUnitTestBuilder
的VariantBuilder
子类型。移除了
VariantBuilder.unitTestEnabled
,取而代之的是在扩展HasUnitTestBuilder
的VariantBuilder
子类型上更一致命名的enableUnitTest
。
已移除的 Gradle 属性
以下 Gradle 属性最初添加的目的是为了全局停用默认启用的功能。
自 AGP 8.0 或更低版本以来,这些功能已默认停用。仅在使用这些功能的子项目中启用它们,以提高构建效率。
属性 | 功能 | 替换 |
---|---|---|
android.defaults.buildfeatures.aidl |
在所有子项目中启用 AIDL 编译 |
仅在包含 AIDL 源文件的子项目中启用 AIDL 编译,方法是在这些项目的 Gradle build 文件中设置以下属性:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
在所有子项目中启用 RenderScript 编译 |
仅在包含 renderscript 源的子项目中启用 renderscript 编译,方法是在这些项目的 Gradle build 文件中设置以下属性:
android { buildFeatures { renderScript = true } } |
已移除的 API
Android Gradle 插件 9.0 移除了以下内容:
- 已废弃并停用的
BaseExtension.registerTransform
API,这些 API 仅用于在以 AGP 4.2 或更低版本为目标平台的同时,允许针对最新 AGP 版本进行编译。
强制执行的 Gradle 属性
如果您设置了以下 Gradle 属性,AGP 9.0 会抛出错误。
Android Gradle 插件升级助理不会将使用这些属性的项目升级到 AGP 9.0。
属性 | 功能 |
---|---|
android.r8.integratedResourceShrinking |
资源缩减现在始终作为 R8 的一部分运行,之前的实现已被移除。 |