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 信息中心的任务,这些信息中心会整合各种测试类型(单元测试和插桩测试)、模块和 build 变体的测试结果和覆盖率,从而在单个信息中心内提供全面概览。如需了解详情,请参阅生成统一的代码覆盖率报告查看统一的测试报告

R8 变更

AGP 9.2.0 中包含以下 R8 变更。

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

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

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

为了缓解此问题并更好地匹配 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 插件
java.lang.ClassNotFoundException:将 Gradle 升级到 9.2.0 后,找不到类“com.android.tools.r8.RecordTag”

Android Gradle 插件 9.2.0

已修复的问题
Android Gradle 插件
如果用户有 commonTest 但忘记 withHostTestBuilder,则向用户发出警告
[融合库 - 公开] OkHttp 包含来源
无法在库中使用清单占位符运行 androidDeviceTest(使用 com.android.kotlin.multiplatform.library 插件的 AGP 9.0.0)
如果用户有 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 sourceset 不适用于库
在 AGP 中嵌入 CC 兼容性声明
将 Kotlin Gradle 插件依赖项更新为 2.3.10
允许测试的 compileSdk 高于主代码
lint
消息中的 lint 错字
由于 `SarifReporter.kt` 中的偏移指针卡住,Lint SARIF 报告中的上下文窗口被截断
Lint Gradle 客户端缺少一项关键功能,因此充其量只能说是不可靠
停用资源缩减时出现 lint 错误
使用嵌套的 IntDef 常量时,AGP 9 Lint 会报告 WrongConstant
停用资源缩减时出现 lint 错误
lint 集成
Android Lint 在使用编译为 Java 21 字节码的自定义 lint 检查时失败
Lint Gradle 任务忽略 --quiet 标志
缩减器 (R8)
以 Java 11 为目标似乎会破坏 d8