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
N/A
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 Patch 2 和 AGP 8.3.2 (2024年4月)
此小更新包括 这些错误修复 。
Android Studio Iguana | 2023.2.1 Patch 1 和 AGP 8.3.1 (2024年3月)
此小更新包括 这些错误修复 。
支持 Gradle 版本目录
Android Studio 支持基于 TOML 的 Gradle 版本目录 ,此功能允许您在一个中心位置管理依赖项,并在模块或项目之间共享依赖项。Android Studio 现在可以通过编辑器建议和与**项目结构**对话框的集成,更轻松地配置版本目录。了解如何 设置和配置 Gradle 版本目录 或如何 将您的构建迁移到版本目录 。
注意: 从 Android Studio Giraffe Canary 10 开始,新项目默认使用 Gradle 版本目录。如果现有项目在 gradle/libs.versions.toml
中使用目录,则添加到该项目的新模块也使用该目录。
代码补全和导航
当您编辑 TOML 文件格式中的版本目录或将依赖项从版本目录添加到构建文件时,Android Studio 提供代码补全功能。要使用代码补全功能,请按 Ctrl+Space (macOS 上为 Command+Space )。此外,您可以通过按 Ctrl+b (macOS 上为 Command+b )快速从应用的 build.gradle
文件中的依赖项引用导航到其在版本目录中的声明位置。
与项目结构对话框集成
如果您的项目使用在 TOML 文件格式中定义的版本目录,则可以通过 Android Studio 中的**项目结构**对话框**变量**视图(**文件 > 项目结构 > 变量**)编辑您在那里定义的变量。对于每个版本目录,都有一个下拉列表,其中列出了该目录中的变量。要编辑变量,请单击其值并将其覆盖。保存这些更改时,TOML 文件会相应更新。
您也可以在**项目结构**对话框的**依赖项**视图中更新依赖项(**文件 > 项目结构 > 依赖项**)。要使用**项目结构**对话框更新版本,请导航到要编辑的模块和依赖项,然后更新**请求的版本**字段。保存这些更改后,TOML 文件将相应更新。请注意,如果依赖项版本是使用变量定义的,则以这种方式直接更新版本会将变量替换为硬编码值。还要注意,无论您是否使用**项目结构**对话框,从构建文件中删除依赖项都不会从版本目录中删除该依赖项。
已知问题和局限性
以下是 Android Studio 中 Gradle 版本目录支持的已知问题或局限性。
Kotlin 脚本文件中插件别名声明的错误高亮显示:当您添加 alias(libs.plugins.example)
形式的插件声明时,编辑器会在 libs
部分下方添加红色下划线。这是 Gradle 8.0 及以下版本中的已知问题,将在 Gradle 的未来版本中解决。
仅支持 TOML 格式的版本目录的 Android Studio 支持:目前,Android Studio 代码补全、导航和项目结构对话框支持仅适用于在 TOML 文件格式中定义的版本目录。但是,您仍然可以直接在 settings.gradle
文件中添加版本目录并在项目中使用其依赖项。
不支持 KTS 构建文件的导航:使用 Control +单击 (macOS 上为 Command +单击 )导航到版本目录中的依赖项定义,目前尚不支持使用 Kotlin 脚本编写的构建文件。
Firebase 助手直接在构建脚本中添加依赖项:Firebase 助手 将依赖项直接添加到您的构建脚本中,而不是通过版本目录。
不支持“查找用法”功能:目前尚不支持查找其他构建文件中版本目录变量的用法,无论构建文件是 KTS 还是 Groovy。也就是说,在版本目录中对变量定义使用 Control +单击 (macOS 上为 Command +单击 )不会指向使用该变量的构建文件。
如果 Android Studio 中的项目结构对话框位于根 gradle
文件夹中,则会显示多个目录文件,但不会显示 复合构建 的目录。例如,如果您有两个目录文件——一个用于您的应用,另一个用于复合构建——项目结构对话框只会显示应用目录文件。您可以使用复合构建,但是必须直接编辑其 TOML 文件。
其他 SDK 洞察:策略问题
对于在 Google Play SDK 索引 中存在 Play 策略违规的公共 SDK,Android Studio 会在 build.gradle.kts
和 build.gradle
文件以及**项目结构对话框**中显示 Lint 警告。您应该更新任何违反 Play 策略的依赖项,因为这些违规可能会阻止您将来发布到 Google Play Console。策略违规警告补充了 Android Studio 显示的 过时版本警告 。
Android Studio compileSdk 版本支持
如果您的项目使用的 compileSdk
不受当前版本的 Android Studio 支持,Android Studio 会显示警告。如果可用,它还会建议迁移到支持项目使用的 compileSdk
的 Android Studio 版本。请记住,升级 Android Studio 也可能需要您升级 AGP 。如果项目使用的 compileSdk
不受当前版本的 AGP 支持,AGP 也会在**构建**工具窗口中显示警告。
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 test 失败并显示“无法找到清单输出”
使用嵌套 Gradle 复合构建时,AGP 模型构建失败
资源缩减器会破坏资源 ID,导致运行时崩溃
最小 Gradle 版本检查不会在第二次构建及之后运行
将 AGP 从 8.0.2 更新到 8.1.0 后,任务 ':app:mergeReleaseClasses' 执行失败
[Gradle 8.4][升级] 由于在 Kotlin Gradle 插件中使用了已弃用的功能,升级后集成测试失败
不要在配置阶段检查清单覆盖文件是否存在
指向 Gradle 文档中关于 MergeJavaResWorkAction 错误的链接已损坏
Gradle 8.1 由于 .gradle/.android/analytics.settings 而破坏了配置缓存
AGP 不应在没有 ProjectComponentIdentifier.build 的情况下使用 ProjectComponentIdentifier.projectPath
请减少/删除 AGP“分析其他插件到 proto:...”的信息级日志记录
[Gradle 8.4][升级] ProcessJavaResTask 中的配置阶段文件操作会破坏配置缓存
用于获取符号表 (R.txt) 的 Variant API
lint 独立插件无法正确处理 gradleApi() 依赖项
AGP 类/属性的 kDocs 不佳。`VariantOutput.enable` 建议将其替换为 `VariantOutput.enable`
AGP 8.3.0-alpha02 无法在 Windows 主机上安装发布配置文件
强制执行 `android.enableDexingArtifactTransform=true`
[Gradle 8.4][升级] 升级后集成测试失败,原因是配置阶段的文件处理
AGP 8.3.0-alpha-02 - `错误:无法反序列化缓存的资源存储库。`
[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 的 Reactive 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 回归:运行按钮延迟几秒钟(创建规范)
AGP 8.3.0-alpha11 生成在启动时使用 android.content.res.Resources$NotFoundException 崩溃的发布 APK
将“android.lint.printStackTrace”AGP 属性提升到稳定版
功能请求:将 com.android.build.api.extension.impl.CURRENT_AGP_VERSION 提升为公共 API
SDK 管理器应停止向标准输出发送大量日志信息
DexArchiveBuilderTaskDelegate 使用仅资源库模块失败
AGP7.4 自定义插件变体对所有抛出重复条目:META-INF/MANIFEST.MF 异常进行转换
支持新的清单标签
studio 设置中“解耦项目”的链接指向错误的位置。
请提供选项以在 Javadoc 和 SourceJar 中包含生成的源代码
需要快速修复 compileSdk 和具有 minCompileSdkVersion 的依赖项之间的差异
[Gradle] tools:overrideLibrary 应支持星号 (*)
编辑清单时 UI 冻结
无法在 AGP 8.2.0 中设置 JaCoCo 版本
使用动态功能的项目中 Android Gradle 插件 8.2.0 install 任务失败
使用动态功能的项目中 Android Gradle 插件 8.2.0 install 任务失败
Dexer (D8)
[反糖化库] 反糖化库版本 2.1 与早期版本的 R8 不兼容
即使仅使用 D8 也运行优化?
Lint
[Lint] TranslucentViewDetector 在 filterIncident 函数中崩溃并导致 Lint 生成错误的结果
TranslucentViewDetector 应接受“behind”值
Android Lint 在具有 `属性 'variantInputs.name' 没有配置的值。` 的 KMP 库上失败。
TranslucentViewDetector 在清单中报告错误的行
使用项目依赖项时,lintDebug 错误地报告 UseTomlInstead 警告
Android Lint 标记的另一个项目的意外问题
LINT 检查未使用的资源在绑定和点击监听器内部的误报检测
无法加载自定义lint检查jar文件:Node无法转换为TreeNode
对于变量声明中带注释的类的用法,Lint visitAnnotationUsage未被调用
Lint 31.0.2 失败,提示 java.util.NoSuchElementException: Array is empty。
没有关于kotlin.text.MatchNamedGroupCollection#get(String)需要API 26的Lint警告
lint:TypographyQuotes 误报:多个转义的撇号被忽略
AGP 8.0.2 lint InvalidId 检测器误报
LintError问题已添加到lint基线
快速修复Lint不起作用,并导致IDE错误
由于部分分析导致测试失败不一致
错误地高亮显示了误报警告
对于变量声明中带注释的类的用法,Lint visitAnnotationUsage未被调用
未使用的资源处理器可能会删除Gradle构建文件
NewApi lint检查不理解“isAtleastU() && otherCondition()”最终字段
来自`LintClient.getSdkHome`的StackOverflow
Android Studio/Lint不会告知您“platform”依赖项何时过期
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中过度优化
使用AGP 8.2.0时,R8 Flurry SDK崩溃
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() 返回空
Test SimpleKotlinEnumUnboxingTest 在 kotlin_dev 机器人上失败
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集成