Android Gradle 插件 3.3.0(2019 年 1 月)

此版本的 Android 插件需要满足以下条件

最低版本 默认版本 备注
Gradle 4.10.1 4.10.1 如需了解详情,请参阅更新 Gradle。使用 Gradle 5.0 或更高版本时,默认的 Gradle Daemon 内存堆大小会从 1 GB 减少到 512 MB。这可能会导致构建性能降低。如需覆盖此默认设置,请在项目的 gradle.properties 文件中指定 Gradle Daemon 的堆大小。
SDK Build Tools 28.0.3 28.0.3 安装配置 SDK Build Tools。

3.3.3 (2020 年 7 月)

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

如需了解详细信息,请参阅4.0.1 发布说明

3.3.2 (2019 年 3 月)

此次次要更新支持 Android Studio 3.3.2,并包含各种 bug 修复和性能改进。如需查看值得关注的 bug 修复列表,请阅读版本更新博客中的相关博文。

3.3.1 (2019 年 2 月)

此次次要更新支持 Android Studio 3.3.1,并包含各种 bug 修复和性能改进。

新特性

  • 改进了类路径同步:在解析运行时和编译时类路径上的依赖项时,Android Gradle 插件会尝试修复那些出现在多个类路径上的依赖项的某些下游版本冲突。

    例如,如果运行时类路径包含 Library A 2.0 版,而编译类路径包含 Library A 1.0 版,则插件会自动将编译类路径上的依赖项更新为 Library A 2.0 版,以避免错误。

    但是,如果运行时类路径包含 Library A 1.0 版,而编译类路径包含 Library A 2.0 版,则插件不会将编译类路径上的依赖项降级为 Library A 1.0 版,并且你会收到错误。如需了解详情,请参阅修复类路径之间的冲突

  • 使用注解处理器时改进了增量式 Java 编译:本次更新通过改进对使用注解处理器时的增量式 Java 编译的支持,缩短了构建时间。

    注意:此功能兼容 Gradle 4.10.1 及更高版本,但 Gradle 5.1 除外,因为存在Gradle 问题 8194

    • 对于使用 Kapt 的项目(大多数纯 Kotlin 项目和 Kotlin-Java 混合项目):即使使用数据绑定或 retro-lambda 插件,也启用了增量式 Java 编译。Kapt 任务的注解处理尚不支持增量式编译。

    • 对于不使用 Kapt 的项目(纯 Java 项目):如果您使用的注解处理器都支持增量式注解处理,则默认启用增量式 Java 编译。如需监控增量式注解处理器的采用情况,请关注Gradle 问题 5277

      但是,如果有一个或多个注解处理器不支持增量式构建,则不会启用增量式 Java 编译。在这种情况下,您可以在 gradle.properties 文件中加入以下标志

      android.enableSeparateAnnotationProcessing=true
                  

      添加此标志后,Android Gradle 插件会在单独的任务中执行注解处理器,并允许 Java 编译任务以增量方式运行。

  • 使用过时 API 时提供更详细的调试信息:当插件检测到您使用的 API 不再受支持时,现在可以提供更详细的信息,帮助您确定该 API 的使用位置。要查看附加信息,您需要在项目的 gradle.properties 文件中包含以下内容

              android.debug.obsoleteApi=true
            

    您还可以通过命令行传递 -Pandroid.debug.obsoleteApi=true 来启用该标志。

  • 您可以在命令行上对功能模块运行插桩测试。

行为变更

  • 惰性任务配置:插件现在使用Gradle 的新任务创建 API,以避免初始化和配置完成当前构建不需要的任务(或不在执行任务图上的任务)。例如,如果您有多个构建变体(例如“发布”和“调试”构建变体),并且您正在构建应用的“调试”版本,插件会避免初始化和配置应用的“发布”版本的任务。

    调用 Variants API 中的某些旧方法(例如 variant.getJavaCompile())可能仍会强制执行任务配置。为了确保您的构建针对惰性任务配置进行了优化,请调用返回 TaskProvider 对象的新方法,例如 variant.getJavaCompileProvider()

    如果您执行自定义构建任务,请了解如何适应 Gradle 的新任务创建 API

  • 对于给定的构建类型,当设置为 useProguard false 时,插件现在会使用 R8 而非 ProGuard 来缩小和混淆应用的的代码和资源。如需详细了解 R8,请阅读 Android Developers 博客上的这篇博文

  • 加快库项目的 R 类生成速度:之前,Android Gradle 插件会为项目的每个依赖项生成一个 R.java 文件,然后将这些 R 类与应用的其他类一起编译。现在,插件会直接生成一个包含应用编译后的 R 类(JAR 文件),而无需先构建中间的 R.java 类。对于包含许多库子项目和依赖项的项目,此优化可以显著提高构建性能,并提高 Android Studio 的索引速度。

  • 构建Android App Bundle时,从此 App Bundle 生成的、面向 Android 6.0(API 级别 23)及更高版本的 APK 默认包含未压缩的原生库。此优化可避免设备复制库,从而减少应用在磁盘上的大小。如果您想停用此优化,请在 gradle.properties 文件中添加以下内容

    android.bundle.enableUncompressedNativeLibs = false
            
  • 插件强制执行某些第三方插件的最低版本。

  • 单一变体项目同步:您的项目与您的构建配置同步是让 Android Studio 理解您的项目结构的重要步骤。但是,对于大型项目而言,此过程可能耗时较长。如果您的项目使用多个构建变体,现在可以通过将同步限制为仅当前选择的变体来优化项目同步。

    您需要使用 Android Studio 3.3 或更高版本以及 Android Gradle Plugin 3.3.0 或更高版本才能启用此优化。满足这些要求后,IDE 会在您同步项目时提示您启用此优化。对于新项目,此优化也默认启用。

    要手动启用此优化,请依次点击 File > Settings > Experimental > Gradle(在 Mac 上依次点击 Android Studio > Preferences > Experimental > Gradle),然后选中 Only sync the active variant 复选框。

    注意:此优化完全支持包含 Java 和 C++ 语言的项目,并对 Kotlin 有部分支持。当对包含 Kotlin 内容的项目启用此优化时,Gradle 同步会在内部回退到使用完整变体。

  • 自动下载缺失的 SDK 软件包:此功能已扩展到支持 NDK。如需了解详情,请阅读使用 Gradle 自动下载缺失的软件包

Bug 修复

  • Android Gradle 插件 3.3.0 修复了以下问题

    • 构建过程调用 android.support.v8.renderscript.RenderScript 而非 AndroidX 版本,即使 Jetifier 已启用
    • 由于 androidx-rs.jar 静态捆绑了 annotation.AnyRes 导致的冲突
    • 使用 RenderScript 时,您不再需要手动在 build.gradle 文件中设置 Build Tools 版本