Android Gradle 插件 8.3.0 是一个主要版本,包含各种新功能和改进。
兼容性
Android Gradle 插件 8.3 支持的 API 级别上限为 API 级别 34。以下是其他兼容性信息:
最低版本
默认版本
备注
Gradle
8.4
8.4
如需了解详情,请参阅更新 Gradle 。
SDK Build Tools
34.0.0
34.0.0
安装 或配置 SDK Build Tools。
NDK
不适用
25.1.8937393
安装 或配置 其他版本的 NDK。
JDK
17
17
如需了解详情,请参阅设置 JDK 版本 。
以下是 Android Gradle 插件 8.3 中的新功能。
补丁版本
以下是 Android Studio Iguana 和 Android Gradle 插件 8.3 中的补丁版本列表。
Android Studio Iguana | 2023.2.1 补丁 2 和 AGP 8.3.2(2024 年 4 月)
此项次要更新包含这些 bug 修复 。
Android Studio Iguana | 2023.2.1 补丁 1 和 AGP 8.3.1(2024 年 3 月)
此项次要更新包含这些 bug 修复 。
支持 Gradle 版本目录
Android Studio 支持基于 TOML 的 Gradle 版本目录 ,借助此功能,您可以在一个集中位置管理依赖项,并在模块或项目之间共享依赖项。现在,Android Studio 通过编辑器建议和与 Project Structure 对话框的集成,可让您更轻松地配置版本目录。了解如何设置和配置 Gradle 版本目录 ,或如何将 build 迁移到版本目录 。
注意 :从 Android Studio Giraffe Canary 10 开始,新项目默认使用 Gradle 版本目录。如果现有项目使用 gradle/libs.versions.toml
中的目录,则添加到该项目的新模块也会使用该目录。
代码补全和导航
当您修改 TOML 文件格式的版本目录或将版本目录中的依赖项添加到 build 文件时,Android Studio 会提供代码补全功能。如需使用代码补全功能,请按 Ctrl+Space (在 macOS 上,按 Command+Space )。此外,您还可以按 Ctrl+b (在 macOS 上,按 Command+b )快速从应用的 build.gradle
文件中的依赖项引用跳转到版本目录中声明该依赖项的位置。
与“Project Structure”对话框集成
如果您的项目使用的是采用 TOML 文件格式定义的版本目录,您可以通过 Android Studio 中的 Project Structure 对话框 Variables 视图(依次点击 File > Project Structure > Variables )修改您在其中定义的变量。每个版本目录都有一个下拉列表,其中列出了该目录中的变量。如需修改变量,请点击其值并覆盖该值。保存这些更改后,TOML 文件会相应地更新。
您还可以在 Project Structure 对话框的 Dependencies 视图中更新依赖项(依次选择 File > Project Structure > Dependencies )。如需使用 Project Structure 对话框更新版本,请前往要修改的模块和依赖项,然后更新 Requested Version 字段。保存这些更改后,TOML 文件会相应地更新。请注意,如果依赖项版本是使用变量定义的,直接以这种方式更新版本会将变量替换为硬编码值。另请注意,无论您是否使用 Project Structure 对话框从 build 文件中移除依赖项,都不会从版本目录中移除该依赖项。
已知问题和限制
以下是 Android Studio 中 Gradle 版本目录支持的已知问题或限制。
在 Kotlin 脚本文件中突出显示插件别名声明时出错:当您添加格式为 alias(libs.plugins.example)
的插件声明时,编辑器会在 libs
部分下方添加红色下划线。这是 Gradle 8.0 及更低版本中的已知问题,将在未来的 Gradle 版本中得到解决。
Android Studio 仅支持 TOML 格式的版本目录:目前,Android Studio 代码补全、导航和“Project Structure”对话框支持仅适用于以 TOML 文件格式定义的版本目录。不过,您仍然可以直接在 settings.gradle
文件中添加版本目录,并在项目中使用其依赖项。
不支持 KTS build 文件的导航:使用 Kotlin 脚本编写的 build 文件尚不支持使用 Ctrl + 点击(在 macOS 上,则按住 Command + 点击)导航到版本目录中的依赖项定义。
Firebase Assistant 直接在构建脚本中添加依赖项:Firebase Assistant 直接将依赖项添加到构建脚本中,而不是通过版本目录添加。
不支持“查找用例”功能:无论 build 文件是 KTS 还是 Groovy 格式,都尚不支持在其他 build 文件中查找版本目录变量的用例。也就是说,在版本目录中对变量定义使用 Ctrl +点击(在 macOS 上,则使用 Command +点击)不会跳转到使用该变量的 build 文件。
Android Studio 中的“Project Structure”对话框会显示位于根 gradle
文件夹中的多个目录文件,但不显示复合 build 的目录。例如,如果您有两个目录文件(一个用于应用,另一个用于复合 build),“Project Structure”对话框将仅显示应用目录文件。您可以使用复合 build,但必须直接修改其 TOML 文件。
其他 SDK 数据分析:政策问题
对于在 Google Play SDK 索引 中存在 Play 政策违规问题的公共 SDK,Android Studio 会在 build.gradle.kts
和 build.gradle
文件以及 Project Structure 对话框 中显示 lint 警告。您应更新所有违反 Play 政策的依赖项,因为这些违规行为可能会导致您日后无法发布到 Google Play 管理中心。政策违规警告是对 Android Studio 显示的过时版本警告 的补充。
Android Studio compileSdk 版本支持
如果您的项目使用了当前版本的 Android Studio 不支持的 compileSdk
,Android Studio 会显示警告。它还会建议您改用支持项目所用 compileSdk
的 Android Studio 版本(如果有)。请注意,升级 Android Studio 可能还需要升级 AGP 。如果当前版本的 AGP 不支持项目使用的 compileSdk
,AGP 还会在 Build 工具窗口中显示警告。
lint 行为变更
从 Android Gradle 插件 8.3.0-alpha02 开始,在模块上运行 lint 时,系统会为该模块的主要组件和测试组件运行单独的 lint 分析任务。之所以做出这项更改,是为了提升性能。
如需恢复之前的行为,请在 gradle.properties
文件中设置 android.experimental.lint.analysisPerComponent=false
。
默认启用精确的资源缩减
精确的资源缩减功能默认处于开启状态,即从 resources.arsc
文件中移除未使用的条目并移除未使用的资源文件。启用此缩减功能后,您的资源表会缩减,并且 APK 中仅包含引用的 res
文件夹条目。
如需关闭精确的资源缩减,请在项目的 gradle.properties
文件中将 android.enableNewResourceShrinker.preciseShrinking
设置为 false
。
修复的问题
Android Gradle 插件 8.3.0
已修复的问题
Android Gradle 插件
PackageForUnitTest 任务的构建缓存是多余的
[AGP 8.1.0] 如果 splits.abi.isEnable 和 testOptions.unitTests.isIncludeAndroidResources 均为 True,./gradlew 测试会失败,并且显示“Unable to find manifest output”
使用嵌套 Gradle 复合 build 时,AGP 模型构建失败
资源缩减器会破坏资源 ID,从而导致运行时崩溃
最低 Gradle 版本检查不会在第二次构建及之后运行
将 AGP 从 8.0.2 更新到 8.1.0 后,任务“:app:mergeReleaseClasses”执行失败
[Gradle 8.4][升级] 由于使用 kotlin gradle 插件中已废弃的功能,升级后集成测试失败
在配置阶段不检查清单叠加层文件是否存在
出现 MergeJavaResWorkAction 错误时,指向 Gradle 文档的链接损坏
Gradle 8.1 会因 .gradle/.android/analytics.settings 而破坏配置缓存
如果缺少 ProjectComponentIdentifier.build,AGP 不应使用 ProjectComponentIdentifier.projectPath
请减少/移除 AGP“Analytics other plugin to proto: …”的信息级日志记录
[Gradle 8.4][升级] 在 ProcessJavaResTask 配置期间执行文件操作会破坏配置缓存
使用 Variant API 获取符号表 (R.txt)
lint 独立插件无法正确处理 handle gradleApi() 依赖项
关于 AGP 类/属性的 kDoc 有待改进。“VariantOutput.enable”建议应将其替换为“VariantOutput.enable”
AGP 8.3.0-alpha02 无法在 Windows 主机上安装版本配置文件
强制执行“android.enableDexingArtifactTransform=true”
[Gradle 8.4][升级] 由于配置阶段中的文件处理问题,升级后集成测试失败
AGP 8.3.0-alpha-02 - “Error: Failed to deserialize cached resource repository.”(错误:无法将缓存的资源仓库反序列化。)
[Gradle 8.4][升级] 由于 TestLabBuildService 配置阶段中的文件处理问题,升级后集成测试失败
AGP 8.1.0 会在运行插桩测试后卸载应用 - 7.4.2 不会
转换 APK 会导致 ListingFileRedirectTask 出错
转换 ASSETS 工件会破坏输入/输出位置信息
将 android.experimental.r8.dex-startup-optimization=true 推广为默认值
迁移到新的 Gradle 配置校准 API
当 Kotlin 编译器尝试更新到 IDEA 21.3 时,资源编译失败
使用工件 API 的响应式 get()
将“android.lint.printStackTrace”AGP 属性升级为稳定版
AGP 8.1.0:动态功能:exportReleaseConsumerProguardFiles 和 extractProguardFiles 之间的显式依赖关系导致编译错误
“variant.unitTest.jniLibs.addGeneratedSourceDirectory”似乎不执行任何操作
更新 AGP 中使用的 XML 解析器以便与 Gradle 8.4 兼容
AGP 8.0.1 发布软件包 jacoco 插桩不会生效
Hedgehog 回归:“Run”按钮会延迟几秒钟(正在制定规范)
AGP 8.3.0-alpha11 会生成发布 APK,该 APK 会在启动时崩溃,并报出 android.content.res.Resources$NotFoundException
将“android.lint.printStackTrace”AGP 属性升级为稳定版
功能请求:将 com.android.build.api.extension.impl.CURRENT_AGP_VERSION 提升为公共 API
SDK 管理器应停止将垃圾日志信息发送到 stdout
使用仅包含资源的库模块时,DexArchiveBuilderTaskDelegate 会失败
所有抛出重复条目的 AGP7.4 自定义插件变体 toTransform:META-INF/MANIFEST.MF 异常
支持新的清单标记
Studio 设置中的“分离项目”链接会转到错误的位置。
请提供选项,以便在 Javadoc 和 SourceJar 上包含生成的源代码
需要快速修复 compileSdk 和依赖项与 minCompileSdkVersion 之间的差异
[Gradle] tools:overrideLibrary 应支持星号 (*)
修改清单时界面冻结
无法在 AGP 8.2.0 中设置 JaCoCo 版本
在使用动态功能的项目中,Android Gradle 插件 8.2.0 安装任务失败
使用动态功能的项目中 Android Gradle 插件 8.2.0 安装任务会失败
Dexer (D8)
[脱糖库] 脱糖库版本 2.1 与之前的 R8 版本不兼容
即使仅使用 D8 也会运行优化吗?
lint
[lint] TranslucentViewDetector 在 filterIncident 函数中崩溃,并导致 lint 生成错误的结果
TranslucentViewDetector 应接受“behind”值
Android Lint 在 KMP 库上失败,并提示属性“variantInputs.name”没有配置值。
TranslucentViewDetector 报告清单中有错误的行
使用项目依赖项时,lintDebug 误报 UseTomlInte 警告
Android Lint 标记的另一个项目中出现意外问题
lint 会勾选绑定和点击监听器内的“未使用的资源”假正例检测
无法加载自定义 lint 检查 jar 文件:节点无法投射为 TreeNode
在变量声明中使用带注解的类时,不会调用 lint visitAnnotationUsage
lint 31.0.2 失败并显示 java.util.NoSuchElementException: Array is empty。
lint 不会对 kotlin.text.MatchNamedGroupCollection#get(String) 要求 API 26 的问题发出警告
lint:TypographyQuotes 假负例:忽略多个转义撇号
AGP 8.0.2 lint InvalidId 检测器假正例
LintError 问题已添加到 lint 基准
Quickfix Lint 无法运行,会导致 IDE 错误
部分分析导致测试失败不一致
误报警告的突出显示无效
在变量声明中使用带注解的类时,不会调用 lint visitAnnotationUsage
未使用的资源处理器可能会删除 Gradle build 文件
NewApi lint 检查无法解析“isAtleastU() && otherCondition()”最终字段
运行“LintClient.getSdkHome”时出现 StackOverflow
Android Studio / lint 不会告知您“平台”依赖项已过期
bug:没有任何针对更新 Firebase-bom 依赖项的建议
项目结构 [以及 Gradle (?)] 未发现要升级到较新版本的 Firebase BOM 依赖项。
lint 集成
来自 testImplementation 依赖项的 DuplicatePlatformClasses lint 错误
缩减器 (R8)
从 AGP 8.0.2 升级到 8.1.0 后 R8 无法工作
isShrinkResources 在 8.3.0-alpha11 到 alpha14 期间进行了过度优化
R8 Flurry SDK 在使用 AGP 8.2.0 时发生崩溃
Android - R8 导致 LinearLayoutManager 的子类崩溃
R8 v8.2.33,在升级后运行时发生崩溃“java.lang.VerifyError: Bad type on operand stack”
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
class.getInterfaces() 返回空
在 kotlin_dev 聊天机器人上,测试 SimpleKotlinEnumUnboxingTest 失败
Android Gradle 插件 8.3.1
已修复的问题
Android Gradle 插件
MergeJavaResourcesTask 增量输入处理问题
lint 集成
lint 无法在 AGP 8.3.0-rc02 中解析同级源代码集的类型
Android Gradle 插件 8.3.2
已修复的问题
Android Gradle 插件
启用了脱糖功能的 AGP 8.3 可能会发生死锁
AGP 8.3 会破坏 zipApksFor 任务
lint 集成