Android Gradle 插件 9.2.0(2026 年 4 月)

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

兼容性

Android Gradle 插件 9.2 支持的最高 API 级别为 API 级别 37.0。以下是其他兼容性信息:

最低版本 默认版本 备注
Gradle 9.4.1 9.4.1 欲了解更多信息,请参阅更新 Gradle
SDK Build Tools 36.0.0 36.0.0 安装配置 SDK Build Tools。
NDK 不适用 28.2.13676358 安装配置不同版本的 NDK。
JDK 17 17 欲了解更多信息,请参阅设置 JDK 版本

统一的覆盖率和测试报告

AGP 9.2.0-alpha07 引入了生成 HTML 仪表板的任务。这些仪表板整合了来自各种测试类型(单元测试和插桩测试)、模块和构建变体的测试结果和覆盖率,在单个仪表板中提供详尽概览。如需了解更多信息,请参阅生成统一的代码覆盖率报告查看统一的测试报告

R8 变更

AGP 9.2.0 中包含以下 R8 更改。

针对保留运行时不可见注解的更严格 -keepattributes 语义

运行时不可见注解无法在运行时被读取。因此,D8 会无条件地移除运行时不可见注解,且没有更改此行为的选项。

为了与 ProGuard 兼容,R8 支持输出运行时不可见注解。但在编译为 DEX 时,通常不应保留运行时不可见注解。然而,为了让 R8 保留运行时可见注解,通常的做法是包含简便规则 -keepattributes *Annotation*(直接包含或从使用方保留规则中间接包含)。不幸的是,这最终也会导致保留运行时不可见注解。

为了缓解此问题并更好地匹配 D8 的行为,带有通配符的 -keepattributes 模式将不再匹配 RuntimeInvisibleAnnotationsRuntimeInvisibleParameterAnnotationsRuntimeInvisibleTypeAnnotations。因此,只有在不使用通配符而明确列出属性名称时,才会保留运行时不可见注解。

现在,以下规则都不会保留运行时不可见注解:

-keepattributes *
-keepattributes *Annotation*
-keepattributes *Invisible*

如需保留运行时不可见注解,请使用以下规则:

-keepattributes RuntimeInvisibleAnnotations,
                RuntimeInvisibleParameterAnnotations,
                RuntimeInvisibleTypeAnnotations

成员规则中支持否定名称

配置语言已扩展,现在您可以匹配否定的成员名称模式。

例如,要匹配所有不以“ForTesting”结尾的方法,请使用以下规则:

-keepclassmembers class com.example.MyClass {
  *** !*ForTesting(...);
}

成员名称模式也可以在 -if 规则的前置条件中被否定。如果否定的成员名称模式包含通配符,则此类通配符不能在 -if 的后续规则中被向后引用。

已修复的问题

Android Gradle 插件 9.2.1

已修复的问题
Android Gradle 插件
将 Gradle 升级到 9.2.0 后出现 java.lang.ClassNotFoundException: Didn't find class "com.android.tools.r8.RecordTag"

Android Gradle 插件 9.2.0

已修复的问题
Android Gradle 插件
如果用户拥有 commonTest 但忘记了 withHostTestBuilder,则向其发出警告
[fused lib - public] OkHttp 包含源码
在库中使用清单占位符时无法运行 androidDeviceTest(AGP 9.0.0 配合 com.android.kotlin.multiplatform.library 插件)
如果用户拥有 src/androidDeviceTest/java 但禁用了 Java,AGP 应发出警告
AGP 9.0 中没有与 applicationVariants.all.mergeAssetsProvider 等效的 androidComponents.onVariant
`*.xml.flat` 文件包含绝对文件路径
R8D8ThreadPoolBuildService 未注册
使用 JDK 26 时 JdkImageTransform 失败
在 AGP 10.0 的 AAR 元数据中自动编码 minAgpVersion
使用新的 AGP DSL 重命名 APK
访问(但未评估)bootClasspath 时报错 IllegalStateException: targetCompatibility is not yet finalized
keepRules sourceset 对库无效
在 AGP 中嵌入 CC 兼容性声明
将 Kotlin Gradle 插件依赖项更新至 2.3.10
允许测试使用比主模块更高的 compileSdk
Lint
Lint 消息中存在拼写错误
由于 `SarifReporter.kt` 中偏移指针卡住,导致 Lint SARIF 报告中的上下文窗口被截断
Lint Gradle 客户端缺少关键功能,导致其往好里说也是不可靠的
禁用资源缩减时的 Lint 错误
AGP 9 Lint 在使用嵌套的 IntDef 常量时报告 WrongConstant
禁用资源缩减时的 Lint 错误
Lint 集成
使用编译为 Java 21 字节码的自定义 lint 检查时 Android Lint 失败
Lint Gradle 任务忽略 --quiet 标志
缩减器 (R8)
以 Java 11 为目标似乎会破坏 d8