Android Gradle 插件 3.3.0(2019 年 1 月)

此版本的 Android 插件需要使用以下工具:

3.3.3(2020 年 7 月)

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

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

3.3.2(2019 年 3 月)

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

3.3.1(2019 年 2 月)

此次要更新对 Android Studio 3.3.1 构成补充,修复了各种 bug 并进行了多项性能改进。

新功能

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

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

    不过,如果运行时类路径包含库 A 版本 1.0,而编译类路径包含库 A 版本 2.0,则插件不会将编译类路径的依赖项降级为库 A 版本 1.0,并且您会遇到错误。如需了解详情,请参阅解决类路径之间的冲突问题部分。

  • 改进了使用注解处理器时的增量 Java 编译:此更新改进了对使用注解处理器时的增量 Java 编译的支持,从而缩短了构建时间。

    注意:此功能与 Gradle 4.10.1 及更高版本兼容;但由于 Gradle 问题 8194,此功能与 Gradle 5.1 并不兼容。

    • 对于使用 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 来避免初始化和配置完成当前 build 不需要的任务(或执行任务图表上未列出的任务)。例如,如果您有多个 build 变体(如“发布”和“调试”build 变体),并且正在构建应用的“调试”版本,插件会避免初始化和配置应用“发布”版本的任务。

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

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

  • 对于指定的 build 类型,在设置 useProguard false 时,插件现在会使用 R8(而不是 ProGuard)压缩和混淆应用的代码和资源。如需详细了解 R8,请参阅 Android 开发者博客上的这篇博文

  • 为库项目更快地生成 R 类:以前,Android Gradle 插件会为项目的每个依赖项生成一个 R.java 文件,然后将这些 R 类和应用的其他类一起编译。现在,插件会直接生成包含应用的已编译 R 类的 JAR,而不会先构建中间的 R.java 类。这项优化不仅可以显著提升包含多个库子项目和依赖项的项目的构建性能,还可以加快在 Android Studio 中编制索引的速度。

  • 构建 Android App Bundle 时,由以 Android 6.0(API 级别 23)或更高版本为目标平台的 App Bundle 生成的 APK 现在默认包含原生库的未压缩版本。这项优化无需设备创建库的副本,因此减少了应用占用的存储空间。如果您想要停用此优化,请在 gradle.properties 文件中添加以下代码:

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

  • 单变体项目同步将项目与 build 配置同步是让 Android Studio 了解项目结构的重要步骤。不过,对于大型项目,此过程可能非常耗时。如果您的项目使用了多个 build 变体,那么您现在可以限定仅同步当前所选的变体,从而优化项目同步操作。

    您需要结合使用 Android Studio 3.3 或更高版本与 Android Gradle 插件 3.3.0 或更高版本,才能启用此优化。满足这些要求后,Android Studio 会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用此优化。

    如需手动启用此优化,请依次点击 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 修复了以下问题:

    • 尽管启用了 Jetifier,但构建流程调用的是 android.support.v8.renderscript.RenderScript,而不是 AndroidX 版本
    • 由于以下原因引起的冲突:androidx-rs.jar 包含静态绑定的 annotation.AnyRes
    • 使用 RenderScript 时,不必再在 build.gradle 文件中手动设置 Build Tools 版本