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 N/A 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 设置来设置此字段:**文件**(或 macOS 上的**Android Studio**)**> 设置 > 构建、执行、部署 > 构建工具 > Gradle**。

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

新宏的主要优点如下:

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

已修复的问题

Android Gradle 插件 8.2.0

已修复的问题
Android Gradle 插件
自定义源类型应创建多风味 sourceset
SDK 版本检查无法处理 SDK 扩展的用户
DependenciesInfoBuilder 需要 API 更新 + 文档
由于缺少嵌套成员,DexingNoClasspathTransform (minSdk >= 24) 与 Java 11 目标失败
DslExtension.Builder.extendProjectWith() 在 Groovy 中的工作方式与描述不符
添加 VariantSelector.withFlavor API,该 API 不使用 kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) 出现缓存未命中,因为 `proguard.txt` 已更改
应用合并清单包含来自依赖项的 extractNativeLibs 和 useEmbeddedDex 属性
AIDL 构建工具 33.0.0 失败
AGP:将 AIDL 工具和框架 AIDL 文件的路径公开为公共 API
请求:让 IDE 提供针对“PermittedSubclasses 需要 ASM9”的修复方案
编译 AGP 时目标字节码为 17
移除 VariantManager.getModifiedName
AndroidTest.packaging.jniLibs.keepDebugSymbols 不影响 androidTest 打包
GMD Instrumentation 测试任务卡住,重试后开始失败
agp 8.1.0 中的 generateLocaleConfig 使用非确定性排序,破坏了可重复构建
ProcessApplicationManifest.navigationJsons 包含具有绝对路径的文件
在创建 AnalyticsService 后,不允许通过 AnalyticsConfiguratorService 访问 GradleBuildProject.Builder
AndroidTest.packaging.jniLibs.keepDebugSymbols 不影响 androidTest 打包
允许编译非法的颜色值
VariantBuilder 的“ReplaceWith”不正确
Gradle 8.1 由于 .gradle/.android/analytics.settings 导致配置缓存中断
弃用消息未使用 `ReplaceWith`
公开一种获取默认 NDK 版本的方法
Android Gradle 插件需要 Java 17 才能运行。
ASM 变换和 toAppend() 不兼容
在 KMP 项目上通过 Gradle 使用 K2 UAST 运行 lint 时修复 Lint 错误
支持 Variant 级别的 missingDimensionStrategy,以及可能的构建类型/变体匹配Fallback
`android.injected.studio.version` 已在 Android Studio Giraffe 中移除
添加禁用 AndroidXDependencyCheck 的功能
agp 8.1.0 中的 generateLocaleConfig 使用非确定性排序,破坏了可重复构建
在 AAR 元数据中宣传 R8/D8 版本要求(例如,用于 coreLibraryDesugaring 和新的 API 代码外联)
同步警告:“在创建 AnalyticsService 后,不应通过 AnalyticsConfiguratorService 访问 GradleBuildProject.Builder”
更新到 Gradle 8.2 里程碑版或 RC 版
无法访问“java.lang.Comparable”
android 资源在 Android 库模块中不可用
将 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 test 失败并显示“无法找到清单输出”
Android Studio Giraffe 在使用 AGP 8.1 时不尊重 versionCodeOverride
AGP 8.1.0 在运行 Instrumentation 测试后卸载应用程序 - 7.4.2 不会
转换 APK 导致 ListingFileRedirectTask 出错
HEDGEHOG 回归:运行按钮延迟几秒钟(正在创建规范)
Dexer (D8)
在针对 min-api 34 及更高版本的 dexing 时启用原生记录和密封类
Lint
已实例化的 lint 检查无法很好地处理 AppComponentFactory
Lint 8.2.0 alpha 版本仍然不支持 Kotlin 中的顶级函数导入
添加一个选项,不在 lint 基线中包含行号和列号
添加一个选项,不在 lint 基线中包含行号和列号
Lint 测试不支持 Java 17 语言特性
Bumblebee 2021.1.1 Patch 1 表示旧版本 (20030203.000550) 的 commons-io 比 2.11.0 新。
Lint 8.2.0 alpha 版本仍然不支持 Kotlin 中的顶级函数导入
Bumblebee 2021.1.1 Patch 1 表示旧版本 (20030203.000550) 的 commons-io 比 2.11.0 新。
Android Studio 错误地将指定版本标记为过期。
使用 K2 UAST 时,Lint 忽略 UseValueOf 问题
Android Lint 标记的来自另一个项目的意外问题
Android Lint 在具有 `属性'variantInputs.name'没有配置值` 的 KMP 库上失败。
Lint 集成
来自 testImplementation 依赖项的 DuplicatePlatformClasses lint 错误
Shrinker (R8)
java.lang.VerifyError: 校验程序拒绝类
使用 Apache POI 库时,构建卡在 :minifyReleaseWithR8 上
如果去除空检查,Kotlin 1.9 会导致 Kotlin lambda 表达式被 R8 销毁

Android Gradle 插件 8.2.1

已修复的问题
Android Gradle 插件
当子项目的类已经通过工件转换进行 dex 处理时,不要在子项目的类上运行 dexing 任务
Android Gradle 插件在 JavaVersion.VERSION_11 和 OpenJDK 21 ea 下失败
Dexer (D8)
为 Android U 反糖化记录
Shrinker (R8)
R8 生成错误的 dex,导致运行时出现类转换异常
R8 导致接口更改为不可访问的接口
使用 AGP 8.2.0 时,R8 Flurry SDK 崩溃
Android - R8 导致 LinearLayoutManager 的子类崩溃
当重新打包开启且收缩、混淆和优化关闭时,R8 中出现 ClassCastException
R8 卡在 BridgeAnalyzer.analyzeMethod
R8 v8.2.33,升级后出现“java.lang.VerifyError: 操作数栈上的类型错误”运行时崩溃

Android Gradle 插件 8.2.2

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