Android Gradle 插件 8.2.0(2023 年 11 月)

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

兼容性

Android Gradle 插件 8.2 支持的最高 API 级别为 API 级别 34。以下是其他兼容性信息:

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

用于指定 JDK 路径的新宏

#GRADLE_LOCAL_JAVA_HOME 是一个新宏,可用于指定 JDK 路径。这样,您就可以更安全、更轻松地指定用于为项目执行 Gradle 守护程序(后台进程)的 Java 主路径。路径选择存储在 .gradle/config.properties 文件的 java.home 字段中。您可以通过 Android Studio 中的 Gradle JDK 设置设置此字段:File(在 macOS 上为 Android Studio> Settings > Build, Execution, Deployment > Build Tools > Gradle

新项目将默认使用 #GRADLE_LOCAL_JAVA_HOME。成功同步后,现有项目将自动迁移到新宏,除非您已在使用类似 #JAVA_HOME 的宏。

新宏的主要优势如下:

  • 您可以手动修改 JDK 路径以触发同步,而无需先打开项目。
  • 与不兼容的 Gradle 和项目 JDK 版本相关的错误更少,因为 Gradle JDK 选择只有一个可信来源。

修复的问题

Android Gradle 插件 8.2.0

已修复的问题
Android Gradle 插件
自定义源代码类型应创建多变种源代码集
SDK 版本检查不会处理 SDK 扩展的用户
DependenciesInfoBuilder 需要 API 更新 + 文档
由于缺少嵌套成员,带 Java 11 目标的 DexingNoClasspathTransform (minSdk >= 24) 执行失败
DslExtension.Builder.extendProjectWith() 在 Groovy 中无法像所描述的那样运行
添加不使用 kotlin.Pair 的 VariantSelector.withFlavor API
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) 缓存未命中,原因是“proguard.txt”已发生更改
应用合并后的清单包含依赖项中的 extractNativeLibs 和 useEmbeddedDex 属性
AIDL 不支持 build-tools 33.0.0
AGP:将 AIDL 工具和框架 AIDL 文件的路径显示为公共 API
请求:让 IDE 修复“PermittedSubclasses requires ASM9”
编译 AGP 时,以字节码 17 为目标
移除 VariantManager.getModifiedName
AndroidTest.installation.jniLibs.keepDebugSymbols 对 androidTest 打包没有影响
GMD 插桩测试任务挂起,并在重试时开始失败
agp 8.1.0 中的 generateLocaleConfig 使用非确定性排序,破坏了可重现的 build
ProcessApplicationManifest.navigationJsons 包含具有绝对路径的文件
创建 AnalyticsService 之后,系统不允许通过 AnalyticsConfiguratorService 访问 GradleBuildProject.Builder
AndroidTest.installation.jniLibs.keepDebugSymbols 对 androidTest 打包没有影响
允许非法颜色值进行编译
VariantBuilder 的“ReplaceWith”不正确
Gradle 8.1 因 .gradle/.android/analytics.settings 而破坏配置缓存
废弃消息不使用“ReplaceWith”
公开用于获取默认 NDK 版本的方法
Android Gradle 插件需要 Java 17 才能运行。
ASM 转换和 toAttach() 不兼容
修复了在 KMP 项目上通过 Gradle 使用 K2 UAST 运行 lint 时出现的 LintErrors
支持变体一级 missingDimensionStrategy,可能还支持 build 类型/变种 matchingFallback
从 Android Studio Giraffe 中移除了“android.jected.studio.version”
添加停用 AndroidXDependencyCheck 的功能
agp 8.1.0 中的 generateLocaleConfig 使用非确定性排序,破坏了可重现的 build
在 AAR 元数据中通告 R8/D8 版本要求(例如,针对 coreLibraryDesugaring 和新 API 违规)
同步警告:“GradleBuildProject.Builder should not be accessed through AnalyticsConfiguratorService after AnalyticsService is created”
更新至 Gradle 8.2 里程碑或 RC
无法访问“java.lang.Comparable”
Android 库模块中不提供 androidResources
将 AGP 从 8.0.2 更新到 8.1.0 后,任务“:app:mergeReleaseClasses”执行失败
Gradle 8.1 会因 .gradle/.android/analytics.settings 而破坏配置缓存
[AGP 8.1.0] 如果 splits.abi.isEnable 和 testOptions.unitTests.isIncludeAndroidResources 均为 True,则 ./gradlew 测试会失败,并且会显示消息“Unable to find manifest output”
使用 AGP 8.1 时,Android Studio Giraffe 不遵从 versionCodeOverride
AGP 8.1.0 会在运行插桩测试后卸载应用 - 7.4.2 不会
转换 APK 会导致 ListingFileRedirectTask 出错
Hedgehog 回归:“Run”按钮会延迟几秒钟(正在制定规范)
Dexer (D8)
在对最低 API 级别为 34 及以上级别执行 dex 处理时,启用原生记录和密封类
lint
实例化的 lint 检查无法妥善处理 AppComponentFactory
lint 8.2.0 Alpha 版仍不支持 Kotlin 中的顶级函数导入
添加一个不在 lint 基准中包含行号和列号的选项
添加一个不在 lint 基准中包含行号和列号的选项
lint 测试不支持 Java 17 语言功能
Bumblebee 2021.1.1 Patch 1 表示 commons-io 的旧版本 (20030203.000550) 高于 2.11.0。
lint 8.2.0 Alpha 版仍不支持 Kotlin 中的顶级函数导入
Bumblebee 2021.1.1 Patch 1 表示 commons-io 的旧版本 (20030203.000550) 高于 2.11.0。
Android Studio 错误地将指定版本标记为过时。
使用 K2 UAST 时,lint 会忽略 UseValueOf 问题
Android Lint 标记的另一个项目中出现意外问题
Android Lint 在 KMP 库上失败,并提示属性“variantInputs.name”没有配置值。
lint 集成
来自 testImplementation 依赖项的 DuplicatePlatformClasses lint 错误
缩减器 (R8)
java.lang.VerifyError: Verifier rejected class
使用 Apache POI 库时,Build 会在 :minifyReleaseWithR8 上卡住
如果去除 null 检查,Kotlin 1.9 会导致 R8 销毁 Kotlin lambda

Android Gradle 插件 8.2.1

已修复的问题
Android Gradle 插件
如果子项目的类已通过工件转换进行 dex 处理,不对这些类运行 dexing 任务
Android Gradle 插件在使用 JavaVersion.VERSION_11 和 OpenJDK 21 ea 时运行失败
Dexer (D8)
Android U 的脱糖记录
缩减器 (R8)
R8 生成损坏的 dex,导致在运行时产生类转换异常
R8 导致接口更改为无法访问的接口
R8 Flurry SDK 在使用 AGP 8.2.0 时发生崩溃
Android - R8 导致 LinearLayoutManager 的子类崩溃
当重新打包处于开启状态且缩减、混淆和优化功能关闭时,R8 中出现 ClassCastException
R8 卡在 BridgeAnalyzer.analyzeMethod 中
R8 v8.2.33,在升级后运行时发生崩溃“java.lang.VerifyError: Bad type on operand stack”

Android Gradle 插件 8.2.2

已修复的问题
Android Gradle 插件
无法在 AGP 8.2.0 中设置 JaCoCo 版本
Dexer (D8)
[脱糖库] 脱糖库版本 2.1 与之前的 R8 版本不兼容
即使仅使用 D8 也会运行优化吗?
缩减器 (R8)
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
class.getInterfaces() 返回空