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 N/A 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 插件
将 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