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 Build Tools 28.0.3 28.0.3 安装配置 SDK Build Tools。

3.4.3(2020 年 7 月)

此次要更新支持Android 11 中软件包可见性的新默认设置和功能兼容。

如需了解详情,请参阅 4.0.1 版本说明

3.4.2(2019 年 7 月)

此次要更新对 Android Studio 3.4.2 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。

3.4.1(2019 年 5 月)

此次要更新对 Android Studio 3.4.1 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。

新功能

  • 新的 lint 检查依赖项配置:更改了 lintChecks 的行为并引入了新的依赖项配置 lintPublish,以便您可以更好地控制要将哪些 lint 检查打包到 Android 库中。

    • 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"))
        }
            
    • 一般来说,打包任务和为任务签名应该会加快整体构建速度。如果您发现与这些任务相关的性能退化,请报告 bug

行为变更

  • Android 免安装应用功能插件废弃警告:如果您仍在使用 com.android.feature 插件构建免安装应用,Android Gradle 插件 3.4.0 会向您发出废弃警告。为了确保您仍然可以在未来版本的插件上构建您的免安装应用,请迁移免安装应用,以使用动态功能插件,这样您还可以通过单个 Android App Bundle 发布安装式应用和免安装应用。

  • R8 默认处于启用状态:R8 将脱糖、压缩、混淆、优化和 dex 处理整合到了一个步骤中,从而显著提高了构建性能。R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。

下图是引入 R8 之前的编译流程的简要概览。

在 R8 之前,ProGuard 是一个与 dex 处理和脱糖不同的编译步骤。

现在,有了 R8,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。

有了 R8,可以在一个编译步骤中执行脱糖、压缩、混淆、优化和 dex 处理。

请注意,R8 旨在与您现有的 ProGuard 规则配合使用,因此您可能不需要采取任何操作即可从 R8 中受益。但是,相对专为 Android 项目设计的 ProGuard 而言,R8 是一项不同的技术,因此压缩和优化可能会导致移除 ProGuard 可能没有的代码。因此,在这种情况(尽管不太可能发生)下,您可能需要添加其他规则,以在 build 输出中保留这些代码。

如果您在使用 R8 时遇到问题,请参阅 R8 兼容性常见问题解答一文,以检查是否有针对您的问题的解决方案。如果没有记录的解决方案,请报告 bug。您可以停用 R8,只需将以下其中一行内容添加到项目的 gradle.properties 文件即可:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

注意:对于指定 build 类型,如果您在应用模块的 build.gradle 文件中将 useProguard 设置为 false,Android Gradle 插件会使用 R8 压缩该 build 类型的应用代码,无论您是否在项目的 gradle.properties 文件中停用 R8 都是如此。

已知问题

  • 虽然目前并未强制要求正确使用唯一软件包名称,但在以后的插件版本中这项要求会变得更为严格。在 Android Gradle 插件版本 3.4.0 上,您可以将下面这行代码添加到 gradle.properties 文件中,选择检查项目是否声明了可接受的软件包名称。

              android.uniquePackageNames = true
              
            

    如需详细了解如何通过 Android Gradle 插件设置软件包名称,请参阅设置应用 ID 一文。