Android Gradle 插件 8.6.0(2024 年 8 月)

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

兼容性

Android Gradle 插件 8.6 支持的 API 级别上限为 API 级别 35。以下是其他兼容性信息:

最低版本 默认版本 备注
Gradle 8.7 8.7 如需了解详情,请参阅更新 Gradle
SDK Build Tools 34.0.0 34.0.0 安装配置 SDK Build Tools。
NDK 不适用 26.1.10909125 安装配置其他版本的 NDK。
JDK 17 17 如需了解详情,请参阅设置 JDK 版本

修复的问题

Android Gradle 插件 8.6.0

已修复的问题
Android Gradle 插件
AGP 7.0.0-alpha10 回归:databinding 处于启用状态时,无法应用插件“com.android.internal.library”
在有和没有 K2 UAST 的情况下运行 lint 时出错
未为变体的 androidTest 配置生成清单
AGP 8.4 会尝试在调试 build 上设置启动配置文件
[Koala 2024.1.2 Canary 版 2] 在分屏 APK 上运行基准配置文件模块时出错
清理/移除了 ProjectInfo
更新了 AGP DSL 中 `isIncludeAndroidResources` 的过时 kdoc
lint 使用 res 目录,而不添加任务依赖项
AGP 8.5:会运行更多“mergeDebugResources”任务,从而降低构建速度
通过 Variant API 添加 srcs 目录无法正常运行
Dexer (D8)
将 API 数据库更新到 Android 15(API 级别 35)
java.lang.VerifyError: Verifier rejected class com.pax.log.LogUtils: java.lang.StackTraceElement com.pax.log.LogUtils.getCaller(com.pax.log.b, java.lang.StackTraceElement[], int) failed to verify
lint
lint 不会针对带注解的注解的使用情况调用 visitAnnotationUsage
使用类型使用注解时出现 UnknownNullness lint 错误
[library desugar] lint shows false positive warning NewApi warnings with desugaring enabled
Credential Manager lint 警告在 Wear 上不正确
lint:SetTextI18n 会针对分配空字符串而发出警告。
lint 集成
包含 build 时 lint 任务会失败
缩减器 (R8)
[r8 8.5]停用 API 建模时,r8 水平类合并会导致 Android5 上出现验证错误
使用 Gradle 插件 8.4.0/8.5.0 构建的 Wear OS 版本可能会导致 java.lang.IllegalAccessError
R8 会隐式将空成员子句替换为 () 的匹配项
[r8 8.5] 垂直类合并导致运行时 NPE
R8 处理错误可能由右移运算符导致
R8 (AGP 8.5.0 及更高版本) 会失败,并显示错误“Unexpected rewriting of item: ... to two distinct items:...”(意外将项“...”重写为两个不同的项“...”)
执行时,由 R8 生成的 dex 文件显示“Unable to find static main(String[]) in 'Test'”(无法在“Test”中找到静态 main(String[]))
由 R8 和 D8 打包的程序之间的行为不同
更新到 Kotlin 2.0 后 R8 NullPointer

Android Gradle 插件 8.6.1

已修复的问题
Dexer (D8)
dex 任务/转换会生成非确定性的 classes.dex 内容
缩减器 (R8)
R8 8.5.x 中的 SimpleInliningConstraintAnalysis 中存在 StackOverflowError
任务 :xxxx:minifyXXXReleaseWithR8 错误:R8:java.util.ConcurrentModificationException
java.lang.NullPointerException:无法调用“com.android.tools.r8.ir.analysis.type.TypeElement.asClassType()”