Android Gradle 插件 8.1.0(2023 年 7 月)

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

兼容性

最低版本 默认版本 备注
Gradle 8.0 8.0 如需了解详情,请参阅更新 Gradle
SDK Build Tools 33.0.1 33.0.1 安装配置 SDK Build Tools。
NDK 不适用 25.1.8937393 安装配置其他版本的 NDK。
JDK 17 17 如需了解详情,请参阅设置 JDK 版本

Kotlin DSL 是 build 配置的默认选项

新项目现在默认使用 Kotlin DSL (build.gradle.kts) 进行 build 配置。与 Groovy DSL (build.gradle) 相比,这种方法具有语法突出显示、代码补全以及导航到声明的功能,可提供更好的修改体验。请注意,如果您使用 AGP 8.1 和 Kotlin DSL 进行 build 配置,应使用 Gradle 8.1,以获得最佳体验。如需了解详情,请参阅 Kotlin DSL 迁移指南

按应用自动设定语言支持

从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成 LocaleConfig 文件,并在最终清单文件中添加对该文件的引用,这样您就不必再手动执行该操作。AGP 使用应用模块的 res 文件夹中的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

请注意,各应用自动语言功能支持搭载 Android 13(API 级别 33)或更高版本的应用。如需使用此功能,您必须将 compileSdkVersion 设为 33 或更高版本。如需为之前版本的 Android 配置各应用语言偏好设定,您仍然需要使用 API 和应用内语言选择器

如需启用各应用自动设定语言支持,请指定默认语言区域:

  1. 在应用模块的 res 文件夹中,新建一个名为 resources.properties 的文件。
  2. resources.properties 文件中,使用 unqualifiedResLocale 标签设置默认语言区域。将语言代码与可选的脚本代码和区域代码(使用短划线将各部分隔开)组合在一起即可构成语言区域名称:

    • 语言:使用由两个或三个字母组成的 ISO 639-1 代码。
    • 脚本(可选):使用 ISO 15924 代码。
    • 区域(可选):使用由两个字母组成的 ISO 3166-1-alpha-2 代码或三位数的 UN_M.49 代码。

    例如,如果您的默认语言区域是美式英语:

        unqualifiedResLocale=en-US
        

AGP 会将此默认语言区域和您指定的所有其他语言区域(使用 res 文件夹中的 values-* 目录)添加到自动生成的 LocaleConfig 文件中。

默认情况下,各应用自动设定语言支持功能处于关闭状态。如需开启该功能,请使用模块级 build.gradle.kts 文件(如果您使用的是 Groovy,则为 build.gradle 文件)的 androidResources {} 块中的 generateLocaleConfig 设置:

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint 包含以 JVM 17 为目标平台的字节码

从 AGP 8.1.0-alpha04 开始,Android Lint 包含以 JVM 17 为目标平台的字节码。如果您编写自定义 lint 检查,则需要使用 JDK 17 或更高版本进行编译,并在 Kotlin 编译器选项中指定 jvmTarget = '17'

如需详细了解 lint 工具,请参阅使用 lint 检查改进您的代码

原生库压缩设置已移至 DSL

从 AGP 8.1.0-alpha10 开始,如果您未使用 DSL(而非清单)配置原生库压缩功能,则会收到警告。以下指南介绍了如何更新配置以使用 DSL。如需获取进行这些更新方面的帮助,请使用 AGP 升级助理 (Tools > AGP Upgrade Assistant)。

如需使用未压缩的原生库,请从清单中移除 android::extractNativeLibs 属性,并将以下代码添加到模块级 build.gradle.kts 文件(如果您使用的是 Groovy,则为 build.gradle 文件):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

实验性 build 标志

这些是 AGP 8.1 中提供的用于配置 build 的实验性标志。

举报 添加于 默认值 备注
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false 如果在未指定签名配置的情况下启用此功能,会导致 AGP 在运行可分析或可调试 build 时使用默认的调试签名配置。默认情况下,此标志处于停用状态,以鼓励 build 作者声明特定的性能分析签名配置。
android.experimental.library.desugarAndroidTest AGP 8.0 false 此标志可让库构建器为测试 APK 启用核心库脱糖,而不会影响生成的 AAR(例如,通过 lint 检查)。我们计划最终在 Variant API 中支持此行为。
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false 启用后,Gradle 管理的设备将允许插件提供用户定义的自定义设备类型。如果要使用 Firebase Test Lab 插件,则必须启用此标志。
android.lint.printStackTrace AGP 8.0 false 启用后,Android lint 会在崩溃时输出堆栈轨迹。此标志具有与 LINT_PRINT_STACKTRACE 环境变量相同的功能。
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 指定在任何一个时间点处于活跃状态的并发 Gradle 管理的设备 (AVD) 数量上限。如果值为 0 或负数,则设备数量没有上限。
android.experimental.testOptions.installApkTimeout AGP 8.0 安装 APK 的超时时长(以秒为单位)。如果值为 0 或负数,UTP 会将其设置为默认值。