Android Gradle 插件 3.4.0(2019 年 4 月)
此版本的 Android 插件需要以下内容
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 5.1.1 | 5.1.1 | 要了解更多信息,请参阅更新 Gradle。使用 Gradle 5.0 及更高版本时,默认的 Gradle 守护程序内存堆大小从 1 GB 减少到 512 MB。这可能会导致构建性能下降。要覆盖此默认设置,请在项目的 gradle.properties 文件中指定 Gradle 守护程序堆大小。 |
SDK 构建工具 | 28.0.3 | 28.0.3 | 安装 或配置 SDK 构建工具。 |
此次小更新支持与 Android 11 中包可见性的新默认设置和功能的兼容性。
有关详细信息,请参阅4.0.1 版本说明。
3.4.2(2019 年 7 月)
此小更新支持 Android Studio 3.4.2,并包含各种错误修复和性能改进。要查看值得注意的错误修复列表,请阅读版本更新博客上的相关帖子。
3.4.1(2019 年 5 月)
此小更新支持 Android Studio 3.4.1,并包含各种错误修复和性能改进。要查看值得注意的错误修复列表,请阅读版本更新博客上的相关帖子。
新功能
-
新的 lint 检查依赖项配置:
lintChecks
的行为已更改,并引入了新的依赖项配置lintPublish
,以使您能够更好地控制哪些 lint 检查打包在您的 Android 库中。-
lintChecks
:这是一个现有配置,您应该将其用于仅在本地构建项目时要运行的 lint 检查。如果您之前使用lintChecks
依赖项配置在已发布的 AAR 中包含 lint 检查,则需要将这些依赖项迁移到改为使用下面描述的新lintPublish
配置。 -
lintPublish
:在库项目中,对于要包含在已发布的 AAR 中的 lint 检查,请使用此新配置,如下所示。这意味着使用您的库的项目也应用这些 lint 检查。
以下代码示例在本地 Android 库项目中使用了这两种依赖项配置。
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
-
通常,打包和签名任务的整体构建速度会得到提升。如果您注意到与这些任务相关的性能下降,请报告错误。
-
行为更改
-
Android Instant Apps 功能插件弃用警告:如果您仍在使用
com.android.feature
插件构建您的即时应用,Android Gradle 插件 3.4.0 将会向您发出弃用警告。为确保您仍然可以在插件的未来版本上构建您的即时应用,请将您的即时应用迁移到使用动态功能插件,该插件还允许您从单个 Android 应用包中发布已安装和即时应用体验。 -
默认启用 R8:R8 将去糖化、缩减、混淆、优化和 dexing 整合到一个步骤中,从而带来明显的构建性能改进。R8 在 Android Gradle 插件 3.3.0 中引入,现在默认情况下对使用插件 3.4.0 及更高版本的应用和 Android 库项目启用。
下图提供了引入 R8 之前的编译过程的高级概述。

现在,使用 R8 后,去糖化、缩减、混淆、优化和 dexing (D8) 都在一个步骤中完成,如下所示。

请记住,R8 设计为与您现有的 ProGuard 规则一起使用,因此您可能无需执行任何操作即可从 R8 中受益。但是,由于它是一种不同于 ProGuard 的技术,专门为 Android 项目设计,因此缩减和优化可能会导致删除 ProGuard 可能没有删除的代码。因此,在这种不太可能的情况下,您可能需要添加其他规则以将该代码保留在构建输出中。
如果您在使用 R8 时遇到问题,请阅读 R8 兼容性常见问题解答,查看是否有解决您问题的方案。如果文档中没有解决方案,请 报告错误。您可以通过将以下行之一添加到项目的 gradle.properties
文件中来禁用 R8
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
注意:对于给定的构建类型,如果您在应用程序模块的 build.gradle
文件中将 useProguard
设置为 false
,则 Android Gradle 插件会使用 R8 缩减该构建类型的应用程序代码,而不管您是否在项目的 gradle.properties
文件中禁用 R8。
-
ndkCompile
已弃用:如果您尝试使用ndkBuild
编译本机库,现在会收到构建错误。您应该改用 CMake 或 ndk-build 来 将 C 和 C++ 代码添加到您的项目中。
已知问题
-
目前尚未强制执行唯一包名的正确用法,但在插件的后续版本中将变得更加严格。在 Android Gradle 插件版本 3.4.0 中,您可以选择加入检查您的项目是否声明了可接受的包名,方法是在您的
gradle.properties
文件中添加以下行。android.uniquePackageNames = true
要了解有关通过 Android Gradle 插件设置包名的更多信息,请参阅 设置应用程序 ID。