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 Patch 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 中,这意味着 code shrinker 不会对其运行。

如需恢复到之前的行为,请在 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 桌面工件
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 下载