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 构建工具。

3.4.3 (2020 年 7 月)

此小幅更新支持与 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 之前的编译过程的高级概览。

Before R8, ProGuard was a different compile step from dexing and
              desugaring.

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

With R8, desugaring, shrinking, obfuscating, optimizing, and
      dexing are all performed in a single compile step.

请记住,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 对该构建类型的应用代码进行缩减。

已知问题

  • 目前未强制执行唯一软件包名称的正确使用,但在后续插件版本中将更加严格。在 Android Gradle 插件版本 3.4.0 中,您可以通过将以下行添加到您的 gradle.properties 文件中,选择检查您的项目是否声明了可接受的软件包名称。

              android.uniquePackageNames = true
              
            

    要了解如何通过 Android Gradle 插件设置软件包名称,请参阅设置应用 ID