Android Gradle 插件 4.2.0(2021 年 3 月)
兼容性
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 6.7.1 | 不适用 | 如需了解详情,请参阅更新 Gradle。 |
SDK Build Tools | 30.0.2 | 30.0.2 | 安装或配置 SDK Build Tools。 |
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 插件 4.2 现在支持 APK v3 和 APK v4 签名格式。
如需在 build 中启用这两种格式之一或同时启用这两种格式,请将以下属性添加到模块级 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 签名,您可以使用 ADB 快速部署大型 APK 增量 APK 安装 Android 11。此新标志负责部署过程中的 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
的原生 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。 在之前的版本中,与 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 build。在 gradle.properties
中设置以下内容:
org.gradle.jvmargs=-XX:+UseParallelGC
如果此字段中已设置了其他选项,请添加一个新选项:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
如需衡量采用不同配置时的构建速度,请参阅对构建进行性能分析。
当 minSdk
为 28 或更高级别时,系统会在 APK 中解压缩 DEX 文件
当 minSdk
= 28 或
。这会导致 APK 大小增加
在设备上的安装大小,并且下载大小大致相同。
如需强制 AGP 改为打包压缩后的 DEX 文件,您可以添加
添加到 build.gradle
文件中:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
使用 DSL 打包压缩后的原生库
我们建议以未压缩的形式打包原生库
从而缩减应用安装大小、缩减应用下载大小和提升应用运行速度
为用户节省了宝贵的时间不过,如果您希望 Android Gradle 插件在构建应用时打包压缩后的原生库,请在应用的 build.gradle
文件中将 useLegacyPackaging
设置为 true
:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
useLegacyPackaging
标志会替换清单属性 extractNativeLibs
。如需了解更多背景信息,请参阅版本说明默认情况下,原生库以未压缩的形式打包。