Android Gradle 插件 7.1.0(2022 年 1 月)

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

7.1.3(2022 年 4 月)

此小版本更新包含以下错误修复

  • R8 报告的重复类问题

要查看此版本中包含的完整错误修复列表,请参阅Android Studio Bumblebee Patch 3 博客文章

7.1.2(2022 年 2 月)

此小版本更新包含以下错误修复

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

要查看此版本中包含的完整错误修复列表,请参阅Android Studio Bumblebee Patch 2 博客文章

7.1.1(2022 年 2 月)

此小版本更新对应于 Android Studio Bumblebee Patch 1 的发布。

要查看此版本中包含的错误修复列表,请参阅Android Studio Bumblebee Patch 1 博客文章

兼容性

最低版本 默认版本 说明
Gradle 7.2 7.2 要了解更多信息,请参阅更新 Gradle
SDK 构建工具 30.0.3 30.0.3 安装配置SDK 构建工具。
NDK N/A 21.4.7075529 安装配置NDK 的不同版本。
JDK 11 11 要了解更多信息,请参阅设置 JDK 版本

Lint 分析任务现在可缓存

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

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

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 块,后面跟着清除构建目录的代码。

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 文件来定义应用于项目中所有模块的构建配置,或应用于 Gradle 本身的存储库和依赖项;使用模块级 build.gradle 文件来定义特定于项目中给定模块的构建配置。

改进的资源压缩器

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 中删除。

构建变体发布

Android Gradle 插件 7.1.0 及更高版本允许您配置要发布到 Apache Maven 存储库的构建变体。AGP 基于新的发布 DSL 创建具有单个或多个构建变体的组件,您可以使用它来自定义发布到 Maven 存储库。与以前的版本相比,这还避免了不必要的工作,因为默认情况下不会创建任何组件。要了解更多信息,请参阅 发布代码示例

发布 Javadoc JAR

AGP 7.1.0 及更高版本允许您从 Java 和 Kotlin 源代码生成 Javadoc,并除了库项目的 AAR 之外还发布 Javadoc JAR 文件。Javadoc 已添加到 POM 和 Gradle 模块元数据{:.external} 文件中。通过在 singleVariantmultipleVariants 发布块中添加 withJavadocJar() 来启用此功能。要了解更多信息,请参阅 发布选项代码示例

发布源代码 JAR

AGP 7.1.0 及更高版本允许您除了库项目的 AAR 之外还发布 Java 和 Kotlin 源代码 JAR 文件。源代码已添加到 POM 和 Gradle 模块元数据{:.external} 文件中。您可以通过在 singleVariantmultipleVariants 发布块中添加 withSourcesJar() 来启用此功能。要了解更多信息,请参阅 发布选项代码示例

Lint 块语义更改

所有覆盖给定问题的严重级别的方法(enabledisable/ignoreinformationalwarningerrorfatal)现在都尊重配置的顺序。例如,在 finalizeDsl() 中将问题设置为致命现在会覆盖在主 DSL 中禁用它。有关更多信息,请参阅 lint{} 块参考文档和 Android 构建流程和扩展点

导航安全参数 Gradle 插件 所依赖的 AGP API 已被删除。AGP 7.1 不适用于 Navigation 安全参数版本 2.4.0-rc1 或 2.4.0,但适用于版本 2.5.0-alpha01 和 2.4.1。同时,作为解决方法,您可以将 AGP 7.1 与 Navigation 安全参数的快照版本 Navigation 2.5.0-SNAPSHOT 一起使用。要使用快照版本,请按照 快照说明 使用构建 ID #8054565。

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

禁用自动组件创建

从 AGP 8.0 开始,默认情况下将禁用自动组件创建。目前,AGP 7.1 会为每个构建变体自动创建一个组件,其名称与构建变体相同,以及一个包含所有构建变体的 all 组件。此自动组件创建将被禁用。要过渡到新的行为,您应该通过将 android.disableAutomaticComponentCreation 设置为 true 来手动禁用自动组件创建。有关更多信息,请参阅 使用 Maven 发布插件

Firebase 性能监控兼容性

AGP 7.1 与 Firebase 性能监控 Gradle 插件版本 1.4.0 及更低版本不兼容。AGP 升级助手不会自动将插件更新到版本 1.4.1,因此,如果您正在使用 firebase-perf 并希望将 AGP 升级到 7.1,则需要手动执行此特定升级。

已知问题

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

使用 Hilt 插件的应用项目的单元测试问题

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

此问题将在 7.1.1 版本中修复,请参阅 问题 #213534628