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 版本。
Kotlin Gradle 插件 (KGP) 2.2.10 2.2.10 如需了解详情,请参阅对 Kotlin Gradle 插件的运行时依赖项。

统一的覆盖率和测试报告

AGP 9.2.0-alpha07 引入了用于生成 HTML 信息中心的新任务,这些信息中心可整合各种测试类型(单元测试和插桩测试)、模块和 build 变体的测试结果和覆盖率,从而在单个信息中心内提供全面的概览。如需了解详情,请参阅生成统一代码覆盖率报告和查看统一测试报告。

R8 变更

AGP 9.2.0 包含以下 R8 变更。

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

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

为了与 ProGuard 兼容,R8 支持输出运行时不可见的注解。但在编译为 DEX 时,通常不应保留运行时不可见的注解。不过,通常的做法是添加便捷规则 -keepattributes *Annotation*(直接或间接通过使用方保留规则),以便 R8 保留运行时可见注解。 遗憾的是,这也会导致保留运行时不可见的注解。

为了缓解此问题并更好地匹配 D8 行为,带有通配符的 -keepattributes 模式不再匹配 RuntimeInvisibleAnnotations、RuntimeInvisibleParameterAnnotations 和 RuntimeInvisibleTypeAnnotations。因此,只有在明确提及属性名称(不使用通配符)的情况下,系统才会保留运行时不可见的注解。

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

-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 插件
java.lang.ClassNotFoundException: Didn't find class "com.android.tools.r8.RecordTag" after upgrading gradle to 9.2.0

Android Gradle 插件 9.2.0

已修复的问题
Android Gradle 插件
如果用户有 commonTest 但忘记了 withHostTestBuilder,则向用户发出警告
[fused lib - public] OkHttp includes sources
无法在库中使用清单占位符运行 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 尚未最终确定
keepRules 源代码集不适用于库
在 AGP 中嵌入 CC 兼容性声明
将 Kotlin Gradle 插件依赖项更新为 2.3.10
允许测试的 compileSdk 高于 main
lint
消息中的 Lint 拼写错误
由于 `SarifReporter.kt` 中的偏移指针卡住,Lint SARIF 报告中的上下文窗口被截断
Lint Gradle 客户端缺少一项关键功能,导致其最多只能算不可靠
停用资源缩减功能时出现 lint 错误
使用嵌套 IntDef 常量时,AGP 9 Lint 会报告 WrongConstant
停用资源缩减功能时出现 lint 错误
lint 集成
Android Lint 失败,并显示自定义 lint 检查已编译为 Java 21 字节码
Lint Gradle 任务会忽略 --quiet 标志
缩减器 (R8)
以 Java 11 为目标平台似乎会破坏 d8