Android Gradle 插件 4.2.0(2021 年 3 月)
兼容性
最低版本 | 默认版本 | 说明 | |
---|---|---|---|
Gradle | 6.7.1 | N/A | 要了解更多信息,请参阅 更新 Gradle。 |
SDK 构建工具 | 30.0.2 | 30.0.2 | 安装 或 配置 SDK 构建工具。 |
NDK | N/A | 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 插件 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 签名步骤。
配置每个变体的应用签名
现在可以在 Android Gradle 插件中 启用或禁用每个变体的应用签名。
此示例演示了如何使用 Kotlin 或 Groovy 中的 onVariants()
方法为每个变体设置应用签名
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
等读取值。对于应用模块,如果相同的 Gradle 属性同时存在于 <var>projectDir</var>/gradle.properties
和 <var>projectDir</var>/app/gradle.properties
中,则来自 <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。在以前的版本中,JDK 8 与 Studio 捆绑在一起。然而,在 4.2 中,现在捆绑了 JDK 11。当使用新的捆绑 JDK 运行 Gradle 时,这可能会导致一些不兼容性或影响 JVM 性能,因为垃圾回收器发生了更改。这些问题在下面进行了描述。
注意:虽然我们建议使用 JDK 11 运行 Gradle,但可以在 项目结构 对话框中更改用于运行 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
。有关更多背景信息,请参阅发行说明 默认情况下以未压缩形式打包的原生库。