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 模式不再匹配 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:“找不到类 com.android.tools.r8.RecordTag”

Android Gradle 插件 9.2.0

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