Android Gradle 插件 8.4.0(2024 年 4 月)

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

兼容性

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

最低版本 默认版本 备注
Gradle 8.6 8.6 如需了解详情,请参阅更新 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.4 中的新功能。

补丁版本

以下是 Android Studio Jellyfish 和 Android Gradle 插件 8.4 中的补丁版本列表。

Android Studio Jellyfish | 2023.3.1 补丁 2 和 AGP 8.4.2(2024 年 6 月)

重要安全更新:Android Studio Iguana | 2023.2.1 及更高版本中提供的 GitHub 插件存在一个安全漏洞,该漏洞可能会将访问令牌泄露给未经授权的各方。

修复方法:JetBrains 已解决 IntelliJ 平台产品中的问题,该修复程序现已包含在 Android Studio Jellyfish | 2023.3.1 补丁 2 (2023.3.1.20) 中。

如果您已在稳定版渠道上安装了 Android Studio build,则可以依次点击 Help > Check for Updates(在 macOS 上,依次点击 Android Studio > Check for Updates)来获取更新。否则,请下载最新的稳定版 build

此外,如果您在 IDE 中积极使用 GitHub 拉取请求功能,我们强烈建议您撤消该插件使用的所有 GitHub 令牌。由于该插件可以使用 OAuth 集成或个人访问令牌 (PAT),因此请检查这两者,并根据需要撤消:

  • 如需撤消 OAuth 集成的访问权限,请依次前往 应用 > 已获授权的 OAuth 应用,然后撤消 JetBrains IDE 集成令牌的访问权限。
  • 如需撤消 PAT 的访问权限,请前往个人访问令牌,然后删除为 GitHub 插件颁发的令牌。默认令牌名称为 IntelliJ IDEA GitHub 集成插件,但您可能使用的是自定义名称。

撤消令牌的访问权限后,您需要重新设置插件,才能让所有插件功能(包括 Git 操作)恢复正常运行。

对于由此给您带来的任何不便,我们深表歉意,并敦促所有用户立即更新,以保护其代码和数据。

本次要更新还包含这些 bug 修复

Android Studio Jellyfish | 2023.3.1 补丁 1 和 AGP 8.4.1(2024 年 5 月)

此项次要更新包含这些 bug 修复

缩减了库类

从 Android Gradle 插件 8.4 开始,如果 Android 库项目经过缩减,系统会发布缩减后的程序类以进行项目间发布。这意味着,如果应用依赖于缩减版的 Android 库子项目,则 APK 将包含缩减版的 Android 库类。如果 APK 中缺少类,您可能需要调整库保留规则

如果您要构建和发布 AAR,则库依赖的本地 JAR 将以未缩减的形式包含在 AAR 中,这意味着代码缩减器不会对其运行。

如需恢复之前的行为,请在 gradle.properties 文件中设置 android.disableMinifyLocalDependenciesForLibraries,并提交 bug。未来的 AGP 版本将移除此标志。

修复的问题

Android Gradle 插件 8.4.0

已修复的问题
Android Gradle 插件
改进了旨在解释“--release”选项为何无法用于 JavaCompile 的错误消息
使用 @DoNotCacheByDefault 停用了 MergeSourceSetFolders 缓存
无法在 AGP 8.2.0 中设置 JaCoCo 版本
DynamicFeatureBuildType 缺少 isDebuggable
缩减后的库类未正确发布以供项目间使用
提供会排除生成的文件的 Variant#sources API
AGP 模型不包含 java-platform 项目依赖项
ExtractAarTransform 会为没有 classes.jar 的 aar 创建不可重现的 classes.jar
允许从 ComposeOptions 配置 sourceInformation
在消息 android.bundle.DeviceSpec 中找不到字段:sdk_runtime
支持 compileOnlyApi
停用资源处理后,R8 在库模块上会失败
添加了在转换期间更改工件名称的功能
将任务输出添加为 sourceSets.androidMain.resources 的 srcDir 不会创建任务依赖项
AndroidPluginVersion.toString() 缺少前导 0
Artifacts.add(FileSystemLocation) 应更具限制性。
AGP 8.3.0-alpha11 会生成发布 APK,该 APK 会在启动时崩溃,并报出 android.content.res.Resources$NotFoundException
在使用动态功能的项目中,Android Gradle 插件 8.2.0 安装任务会失败
AIDL 编译失败并抛出 IndexOutOfBoundsException:索引 0 超出长度 0 的范围
MergeJavaResourcesTask 增量输入处理问题
AGP 8.3.0-alpha02 依赖于存在已知安全漏洞的库
所选 activity 模板需要项目包含 androidx.* 依赖项
AGP 升级助理会错误地从模块中移除 consumerProguardFiles
AGP 升级助理无限加载
SourceDirectories#static 不应依赖于 GenerateBuildConfig 任务
Compose 预览无法解析传递依赖项中的类
AGP 8.3 会破坏 zipApksFor 任务
打包在 Android APK 中的 AndroidX Desktop 工件
lint
lint 测试框架的 GradleModelMocker 不允许设置库版本
lint K2 UAST:UCallableReferenceExpression 报告了错误的 qualifierType
使用过载函数时,如果 useK2Uast=true,则 lint 会出现假正例
[BuildTool/Lint] ChecksSdkIntAtLeast 构造函数属性
lint 集成
lint 无法对 KMP 依赖项进行解析

Android Gradle 插件 8.4.1

已修复的问题
Android Gradle 插件
允许抑制有关 JDK 21 废弃对以 Java 8 为目标平台的支持的警告
Dexer (D8)
java.lang.VerifyError: Verifier rejected class
混淆后出现新版 R8 格式转换错误
中间 build 可能不包含桩的全局合成内容

Android Gradle 插件 8.4.2

已修复的问题
Android Gradle 插件
AGP 8.4 似乎会破坏 CI 上的 GMD 下载