Android Gradle Plugin 4.2.0 (2021 年 3 月)
兼容性
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 6.7.1 | 不适用 | 要了解详情,请参阅更新 Gradle。 |
SDK 构建工具 | 30.0.2 | 30.0.2 | 通过 安装 或 配置 SDK 构建工具。 |
NDK | 不适用 | 21.4.7075529 | 安装 或 配置 不同版本的 NDK。 |
新功能
此版本的 Android Gradle 插件包含以下新功能。
默认使用 Java 语言版本 8
从 4.2 版本开始,AGP 将默认使用 Java 8 语言级别。Java 8 提供了对许多较新语言特性的访问权限,包括 lambda 表达式、方法引用和静态接口方法。有关支持功能的完整列表,请参阅 Java 8 文档。
要保留旧行为,请在模块级 build.gradle.kts
或 build.gradle
文件中显式指定 Java 7
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
新的 JVM 资源编译器
Android Gradle 插件 4.2 工具中的新 JVM 资源编译器取代了 AAPT2 资源编译器 的部分功能,可能会提高构建性能,尤其是在 Windows 机器上。新的 JVM 资源编译器默认启用。
现在支持 v3 和 v4 签名
Android Gradle Plugin 4.2 现在支持 APK v3 和 APK v4 签名格式。要在构建中启用其中一种或两种格式,请将以下属性添加到模块级 build.gradle
或 build.gradle.kts
文件中
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}
通过 APK v4 签名,您可以在 Android 11 中使用 ADB 增量式 APK 安装 快速部署大型 APK。这个新标志负责处理部署过程中的 APK 签名步骤。
按 variant 配置应用签名
现在可以按 variant 在 Android Gradle 插件中启用或停用应用签名。
此示例演示如何使用 Kotlin 或 Groovy 中的 onVariants()
方法按 variant 设置应用签名
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
新的 Gradle 属性:android.native.buildOutput
为了减少构建输出中的杂乱信息,AGP 4.2 会过滤掉使用 CMake 和 ndk-build
的原生构建消息,默认仅显示 C/C++ 编译器输出。以前,构建的每个文件都会生成一行输出,导致信息量很大。
如果您想查看全部原生输出,请将新的 Gradle 属性 android.native.buildOutput
设置为 verbose
。
您可以在 gradle.properties
文件或通过命令行设置此属性。
gradle.properties
android.native.buildOutput=verbose
命令行
-Pandroid.native.buildOutput=verbose
此属性的默认值为 quiet
。
gradle.properties 文件的行为变更
从 AGP 4.2 开始,不再可能从子项目覆盖 Gradle 属性。换句话说,如果您在子项目的 gradle.properties
文件中(而非根项目中)声明属性,则该属性将被忽略。
例如,在之前的版本中,AGP 会读取 <var>projectDir</var>/gradle.properties
、<var>projectDir</var>/app/gradle.properties
、<var>projectDir</var>/library/gradle.properties
等文件中的值。对于应用模块,如果 <var>projectDir</var>/gradle.properties
和 <var>projectDir</var>/app/gradle.properties
中都存在相同的 Gradle 属性,则以 <var>projectDir</var>/app/gradle.properties
中的值为准。
在 AGP 4.2 中,此行为已更改,AGP 将不再从子项目中的 gradle.properties
文件(例如 <var>projectDir</var>/app/gradle.properties
)加载值。此更改反映了 新的 Gradle 行为,并支持 配置缓存
有关在 gradle.properties
文件中设置值的更多信息,请参阅 Gradle 文档。
Gradle 兼容性和配置更改
在 Android Studio 中运行时,Gradle 构建工具使用 Studio 捆绑的 JDK。在之前的版本中,Studio 捆绑的是 JDK 8。而在 4.2 中,捆绑的是 JDK 11。使用新的捆绑 JDK 运行 Gradle 时,由于垃圾回收器的变化,这可能会导致一些不兼容问题或影响 JVM 性能。这些问题在下文进行描述。
注意:尽管我们建议使用 JDK 11 运行 Gradle,但您可以在 Project Structure 对话框中更改用于运行 Gradle 的 JDK。更改此设置仅会更改用于运行 Gradle 的 JDK,而不会更改用于运行 Studio 本身的 JDK。
Studio 与 Android Gradle 插件 (AGP) 的兼容性
Android Studio 4.2 可以打开使用 AGP 3.1 及更高版本(前提是 AGP 正在运行 Gradle 4.8.1 及更高版本)的项目。有关 Gradle 兼容性的更多信息,请参阅更新 Gradle。
针对 JDK 11 优化 Gradle 构建
此 JDK 11 更新会影响 JVM 垃圾回收器的默认配置,因为 JDK 8 使用的是并行垃圾回收器,而 JDK 11 使用的是 G1 垃圾回收器。
为了潜在地提高构建性能,我们建议使用并行垃圾回收器测试您的 Gradle 构建。在 gradle.properties
中设置以下内容
org.gradle.jvmargs=-XX:+UseParallelGC
如果此字段中已设置其他选项,请添加新选项
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
要使用不同配置测量构建速度,请参阅分析您的构建。
当 minSdk
= 28 或更高时,APK 中的 DEX 文件不压缩
默认情况下,当 minSdk
= 28 或更高时,AGP 会在 APK 中打包未压缩的 DEX 文件。这会导致 APK 大小增加,但设备上的安装大小会减小,下载大小大致相同。
要强制 AGP 转而打包压缩的 DEX 文件,您可以将以下内容添加到 build.gradle
文件中
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
使用 DSL 打包压缩的原生库
我们建议以未压缩形式打包原生库,因为这会减小应用安装大小、减小应用下载大小,并缩短用户的应用加载时间。但是,如果您希望 Android Gradle 插件在构建应用时打包压缩的原生库,请在应用的 build.gradle
文件中将 useLegacyPackaging
设置为 true
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
标志 useLegacyPackaging
替代了清单属性 extractNativeLibs
。如需更多背景信息,请参阅版本说明 默认以未压缩形式打包的原生库。