Android Gradle 插件 7.1.0(2022 年 1 月)

Android Gradle 插件 7.1.0 是一个主要版本,包含各种新功能和改进。

7.1.3(2022 年 4 月)

本次要更新包含以下 bug 修复:

  • R8 报告的重复类问题

如需查看此版本中的完整 bug 修复列表,请参阅 Android Studio Bumblebee Patch 3 博文

7.1.2(2022 年 2 月)

本次要更新包含以下 bug 修复:

  • Android Gradle 插件 7.1.0-rc01 在单元测试期间无法执行 ASM 字节码转换
  • Gradle 同步失败,并显示“无法加载类‘com.android.build.api.extension.AndroidComponentsExtension’”消息。
  • 无法在 Android Gradle 插件 7.0.0 中通过 Groovy DSL 使用部分新的 DSL 代码块
  • AGP 7.1 新发布的 API:创建的 javadoc jar 没有签名
  • ClassesDataSourceCache 应使用最新的 ASM 版本
  • Android Studio BumbleBee 并非总是部署最新的更改

如需查看此版本中的完整 bug 修复列表,请参阅 Android Studio Bumblebee Patch 2 博文

7.1.1(2022 年 2 月)

本次要更新对应于 Android Studio Bumblebee 补丁程序 1 版本。

如需查看此版本中的 bug 修复列表,请参阅 Android Studio Bumblebee Patch 1 博文

兼容性

最低版本 默认版本
Gradle 7.2 7.2
SDK Build Tools 30.0.3 30.0.3
NDK 不适用 21.4.7075529
JDK 11 11

Lint 分析任务现在可缓存

AndroidLintAnalysisTask 现在与 Gradle 构建缓存兼容。如果您通过在 gradle.properties 文件中设置 org.gradle.caching=true 来启用构建缓存,lint 分析任务将尽可能从构建缓存中获取其输出。

使用 Android Gradle 插件运行 lint 时,lint 分析任务通常是最大的瓶颈,因此在许多情况下,启用构建缓存可提高运行 lint 时的构建速度。例如,如果您有一个多模块项目,并且在 CI 服务器上运行 lint 之前清理了 build 目录,您应该会看到性能显著提升。

C/C++ 模块现在可引用同一项目中的其他 C/C++ 模块

现在,包含 C/C++ 代码的 Gradle Android 模块可设置为引用其他 Gradle 模块中的头文件和库代码。Prefab 协议用于在 Gradle 模块之间传递头文件和库。

要求

  • 使用方模块必须为 CMake,而非 ndk-build。对 ndk-build 的支持将需要未来 NDK 更新。发布方模块可以是 CMakendk-build

  • 使用方模块必须在 build.gradle 文件中启用 prefab

android {
  buildFeatures {
    prefab true
  }
}
  • 发布方模块必须在 build.gradle 文件中启用 prefabPublishing
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • 使用方模块必须通过在 build.gradle 文件的 dependencies 代码块中添加一行代码来引用发布方模块。例如:
dependencies {
  implementation project(':mylibrary')
}
  • 发布方模块必须使用 prefab 部分公开软件包。例如:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • 使用方模块的 CMakeLists.txt 文件可以使用 find_package() 来查找提供方模块发布的软件包。例如:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

如需详细了解如何使用 AGP 配置原生 AAR 使用方和提供方,请参阅原生依赖项与 AGP

settings.gradle 文件中的代码库设置

在 Android Studio Bumblebee 中创建新项目时,顶层 build.gradle 文件包含 plugins 代码块,后跟用于清理 build 目录的代码:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

之前位于顶级 build.gradle 文件中的代码库设置现在位于 settings.gradle 文件中:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

模块级 build.gradle 文件未更改。因此,请使用顶级 build.gradle 文件和 settings.gradle 文件定义将应用于项目中所有模块的 build 配置,或定义适用于 Gradle 本身的代码库和依赖项;使用模块级 build.gradle 文件定义特定于项目中的给定模块的 build 配置。

改进了资源缩减器

Android Studio Bumblebee 包含一个经过改进的资源缩减器,可以帮助您缩减应用大小。

支持具有动态功能的应用

Android Gradle 插件 7.1.0-alpha09 更新了 Android 资源缩减器的默认实现。新的实现支持缩减具有动态功能的应用。

进一步缩减应用大小实验性功能

新的资源缩减器实现可以修改资源表来移除未使用的值资源以及对未使用文件资源的引用,从而进一步缩减应用大小。新的资源缩减器可以完全删除未使用的文件资源,从而进一步缩减应用的大小。默认情况下,此行为尚未启用,但您可以向项目的 gradle.properties 文件中添加实验性选项 android.experimental.enableNewResourceShrinker.preciseShrinking=true 来选择启用此行为。

请报告您使用新资源缩减器或实验性标志时遇到的任何问题。为帮助诊断问题,或者作为临时解决方法,您可以通过将 android.enableNewResourceShrinker=false 添加到项目的 gradle.properties 来切换回之前的实现。新的缩减器会将未使用的文件资源替换为与先前的资源缩减器相比略有不同的最小文件,但这不会对运行时产生任何影响。

我们计划从 Android Gradle 插件 8.0.0 中移除旧实现。

发布 build 变体

Android Gradle 插件 7.1.0 及更高版本允许您配置要发布到 Apache Maven 制品库的 build 变体。AGP 会根据新的发布 DSL 创建具有一个或多个 build 变体的组件,您可以使用这些组件自定义要发布到 Maven 代码库的内容。与先前版本相比,这样还可以避免不必要的工作,因为默认情况下不会创建任何组件。如需了解详情,请参阅发布代码示例

发布 Javadoc JAR

AGP 7.1.0 及更高版本允许您从 Java 和 Kotlin 源代码生成 Javadoc,并为库项目发布 Javadoc JAR 文件和 AAR。Javadoc 已添加到 POM 和 Gradle Module Metadata{:.external} 文件中。如需启用此功能,请在 singleVariantmultipleVariants 发布块中添加 withJavadocJar()。 如需了解详情,请参阅发布选项代码示例

发布源代码 JAR

除了 AAR 之外,AGP 7.1.0 及更高版本还支持为库项目发布 Java 和 Kotlin 源代码 JAR 文件。这些源代码会添加到 POM 和 Gradle Module Metadata{:.external} 文件中。如需启用此功能,您可以在 singleVariantmultipleVariants 发布块中添加 withSourcesJar()。如需了解详情,请参阅发布选项代码示例

Lint 块语义变更

覆盖问题指定严重级别(enabledisable/ignoreinformationalwarningerrorfatal)的所有 lint 方法现在遵循配置顺序。例如,在 finalizeDsl() 中将某个问题设置为严重问题会覆盖在主 DSL 中停用该问题的行为。如需了解详情,请参阅 lint{} 块参考文档以及 Android 构建流程和扩展点

移除了 Navigation Safe Args Gradle 插件所依赖的 AGP API。AGP 7.1 不适用于 Navigation Safe Args 版本 2.4.0-rc1 或 2.4.0,但支持版本 2.5.0-alpha01 和 2.4.1。在此期间,作为权宜之计,您可以将 AGP 7.1 与 Navigation Safe Args 的快照 build (Navigation 2.5.0-SNAPSHOT) 搭配使用。如需使用快照 build,请按照快照说明操作,其中 build ID 为 8054565。

此外,Navigation Safe Args 版本 2.4.1 和 2.5.0 将不再适用于 AGP 4.2;如需使用这些版本的 Safe Args,您必须使用 AGP 7.0 及更高版本。

停用自动组件创建功能

从 AGP 8.0 开始,默认情况下,系统会停用自动组件创建功能。目前,AGP 7.1 会自动为每个 build 变体创建一个组件,其名称与 build 变体相同,并创建一个包含所有 build 变体的 all 组件。此自动组件创建功能将被停用。如需过渡到新行为,您应将 android.disableAutomaticComponentCreation 设置为 true. 以手动停用自动组件创建功能。如需了解详情,请参阅使用 Maven Publish 插件

Firebase Performance Monitoring 兼容性

AGP 7.1 与 Firebase Performance Monitoring Gradle 插件版本 1.4.0 及更低版本不兼容。AGP 升级助理不会自动将插件更新到版本 1.4.1,因此,如果您使用的是 firebase-perf,并且希望将 AGP 升级到 7.1,则需要手动进行这一升级。

已知问题

本部分介绍了 Android Gradle 插件 7.1.0 中存在的已知问题。

对使用 Hilt 插件的应用项目进行单元测试时出现问题

单元测试类路径包含非插桩应用类,这意味着,运行单元测试时,Hilt 不会插桩应用类来处理依赖项注入。

此问题将在 7.1.1 版本中得到解决,请参阅问题 213534628