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 构建工具 34.0.0 34.0.0 安装配置 SDK 构建工具。
NDK N/A 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 Patch 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 版本,您可以点击帮助 > 检查更新(或在 macOS 上点击Android Studio > 检查更新)来获取更新。否则,下载最新的稳定版本

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

  • 要撤销 OAuth 集成的访问权限,请转到 应用程序 > 已授权的 OAuth 应用,并撤销JetBrains IDE 集成令牌的访问权限。
  • 要撤销 PAT 的访问权限,请转到 个人访问令牌 并删除为 GitHub 插件发放的令牌。默认令牌名称为IntelliJ IDEA GitHub 集成插件,但您可能使用了自定义名称。

撤销令牌的访问权限后,您需要重新设置插件才能使所有插件功能(包括 Git 操作)再次运行。

对于由此造成的不便,我们深表歉意,并强烈建议所有用户立即更新以保护其代码和数据。

此次小幅更新还包括 这些错误修复

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

此小幅更新包括 这些错误修复

库类已缩减

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

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

要恢复到之前的行为,请在 gradle.properties 文件中设置 android.disableMinifyLocalDependenciesForLibraries提交错误报告。AGP 的未来版本将删除此标志。

已修复的问题

Android Gradle 插件 8.4.0

已修复的问题
Android Gradle 插件
改进 `--release` 选项无法用于 JavaCompile 的错误消息
使用 @DoNotCacheByDefault 禁用 MergeSourceSetFolders 的缓存
无法在 AGP 8.2.0 中设置 JaCoCo 版本
DynamicFeatureBuildType 缺少 isDebuggable
最小化后的库类未正确发布以供项目间使用
提供 Variant#sources API,该 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 在启动时因 android.content.res.Resources$NotFoundException 而崩溃
在使用动态功能的项目中,Android Gradle 插件 8.2.0 install 任务失败
AIDL 编译失败,出现 IndexOutOfBoundsException: Index 0 out of bounds for length 0
MergeJavaResourcesTask 增量输入处理问题
AGP 8.3.0-alpha02 依赖于具有已知安全漏洞的库
选定的活动模板需要具有 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 格式转换错误
中间构建可能不包含存根的完整全局合成内容

Android Gradle 插件 8.4.2

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