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 构建工具 34.0.0 34.0.0 安装配置 SDK 构建工具。
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 插件
自定义源类型应创建多 flavor 源集
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.packaging.jniLibs.keepDebugSymbols 不影响 androidTest 打包
GMD 插桩测试任务挂起,重试时开始失败
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 Transform 和 toAppend() 不兼容
修复在 KMP 项目上通过 Gradle 使用 K2 UAST 运行 lint 时的 LintErrors
支持 Variant 级别的 missingDimensionStrategy,以及可能的 build type/flavor matchingFallback
在 Android Studio Giraffe 中移除了 `android.injected.studio.version`
添加禁用 AndroidXDependencyCheck 的功能
agp 8.1.0 中的 generateLocaleConfig 使用非确定性排序,破坏了可重现构建
在 AAR 元数据中公布 R8 / D8 版本要求(例如,针对 coreLibraryDesugaring 和新的 API out-of-lining)
同步警告:“在 AnalyticsService 创建后,不应通过 AnalyticsConfiguratorService 访问 GradleBuildProject.Builder”
更新到 Gradle 8.2 里程碑或 RC
无法访问 'java.lang.Comparable'
android library 模块中 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 test 会因“无法找到清单输出”而失败
Android Studio Giraffe 不尊重 AGP 8.1 的 versionCodeOverride 设置
AGP 8.1.0 在运行插桩测试后卸载应用 - 7.4.2 不会
转换 APK 会导致 ListingFileRedirectTask 错误
HEDGEHOG 回归:运行按钮延迟了几秒(Creating spec)
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 提示 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 库上失败,并显示 `property 'variantInputs.name' doesn't have a configured value.`
Lint 集成
testImplementation 依赖项导致的 DuplicatePlatformClasses lint 错误
代码缩减器 (R8)
java.lang.VerifyError: 验证器拒绝类
使用 Apache POI 库时,构建任务 :minifyReleaseWithR8 卡住
如果剥离 nullchecks,Kotlin 1.9 会导致 Kotlin lambda 被 R8 破坏

Android Gradle 插件 8.2.1

已修复问题
Android Gradle 插件
当子项目的类已通过 artifact transforms 进行 dex 处理时,不要在其上运行 dexing 任务
Android Gradle 插件在使用 JavaVersion.VERSION_11 和 OpenJDK 21 ea 时失败
Dexer (D8)
为 Android U desugar records
代码缩减器 (R8)
R8 生成损坏的 dex,导致运行时出现类转换异常
R8 导致接口更改为不可访问的接口
使用 AGP 8.2.0 时,R8 导致 Flurry SDK 崩溃
Android - R8 导致 LinearLayoutManager 的子类崩溃
R8 在开启 repackaging 并关闭 shrinking、混淆和优化时出现 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)
[desugared library] Desugared library 版本 2.1 与 R8 的先前版本不兼容
即使只使用 D8,也会运行优化?
代码缩减器 (R8)
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
class.getInterfaces() 返回空