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,并包含各种 bug 修复和性能改进。如需查看值得注意的 bug 修复列表,请阅读版本更新博客上的相关博文。
3.4.1 (2019 年 5 月)
此小幅更新支持 Android Studio 3.4.1,并包含各种 bug 修复和性能改进。如需查看值得注意的 bug 修复列表,请阅读版本更新博客上的相关博文。
新功能
-
新的 lint 检查依赖项配置:
lintChecks
的行为已更改,并且引入了一个新的依赖项配置lintPublish
,以便您可以更好地控制打包在 Android 库中的 lint 检查。-
lintChecks
:这是现有配置,应用于仅在本地构建项目时运行的 lint 检查。如果您之前使用lintChecks
依赖项配置将 lint 检查包含在发布的 AAR 中,则需要将这些依赖项迁移以改用下面描述的新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 Feature 插件弃用警告:如果您仍然使用
com.android.feature
插件构建即时应用,Android Gradle 插件 3.4.0 将会抛出弃用警告。为了确保您在未来的插件版本上仍然可以构建即时应用,请将您的即时应用迁移到使用动态功能插件,该插件还允许您从单个 Android App Bundle 发布已安装和即时应用体验。 -
默认启用 R8: R8 集成了脱糖、代码缩减、混淆、优化和 dexing,全部在一个步骤中完成,从而显著提高了构建性能。R8 在 Android Gradle 插件 3.3.0 中引入,现在对于使用插件 3.4.0 及更高版本的应用和 Android 库项目默认启用。
下图提供了引入 R8 之前的编译过程的高级概览。

现在,有了 R8,脱糖、代码缩减、混淆、优化和 dexing (D8) 都可以在一个步骤中完成,如下图所示。

请记住,R8 设计为与您现有的 ProGuard 规则一起工作,因此您很可能无需采取任何操作即可从 R8 中受益。但是,由于 R8 是专门为 Android 项目设计的不同于 ProGuard 的技术,代码缩减和优化可能会删除 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
,则无论您是否在项目的 gradle.properties
文件中禁用 R8,Android Gradle 插件都会使用 R8 对该构建类型的应用代码进行缩减。
-
ndkCompile
已弃用:如果您尝试使用ndkBuild
编译原生库,现在将会收到构建错误。您应该改用 CMake 或 ndk-build 将 C 和 C++ 代码添加到您的项目。
已知问题
-
目前未强制执行唯一软件包名称的正确使用,但在后续插件版本中将更加严格。在 Android Gradle 插件版本 3.4.0 中,您可以通过将以下行添加到您的
gradle.properties
文件中,选择检查您的项目是否声明了可接受的软件包名称。android.uniquePackageNames = true
要了解如何通过 Android Gradle 插件设置软件包名称,请参阅设置应用 ID。