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,并包含各种错误修复和性能改进。要查看值得注意的错误修复列表,请阅读版本更新博客上的相关帖子。

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 之前的编译过程的高级概述。

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 中受益。但是,由于它是一种不同于 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。

已知问题

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

              android.uniquePackageNames = true
              
            

    要了解有关通过 Android Gradle 插件设置包名的更多信息,请参阅 设置应用程序 ID