Android Gradle 插件 4.2.0(2021 年 3 月)
兼容性
最低版本 | 默认版本 | 备注 | |
---|---|---|---|
Gradle | 6.7.1 | N/A | 如需了解详情,请参阅更新 Gradle。 |
SDK Build Tools | 30.0.2 | 30.0.2 | 安装或配置 SDK Build Tools。 |
NDK | N/A | 21.4.7075529 | 安装或配置其他版本的 NDK。 |
新功能
此版本的 Android Gradle 插件包含以下新功能。
默认情况下使用 Java 语言版本 8
从版本 4.2 开始,AGP 将默认使用 Java 8 语言级别。 Java 8 提供对许多更新语言功能(包括 lambda)的访问权限 表达式、方法引用和静态接口方法。如需查看完整列表 请参阅 Java 8 文档。
要保留旧行为,请在模块级中明确指定 Java 7
build.gradle.kts
或 build.gradle
文件:
// 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 中启用或停用应用签名 每个变体。
此示例演示了如何使用
onVariants()
方法:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
新的 Gradle 属性:
android.native.buildOutput
为减少 build 输出中的杂乱程度,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, 可以在 项目结构 对话框。更改此设置只会更改用于运行 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 垃圾回收器。
为了尽可能提升 build 性能,我们建议
测试您的 Gradle 构建
并行垃圾回收器。在 gradle.properties
中设置以下内容:
org.gradle.jvmargs=-XX:+UseParallelGC
如果此字段中已设置了其他选项,请添加一个新选项:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
如需衡量采用不同配置时的构建速度,请参阅 对 build 进行性能分析。
当 minSdk
为 28 或更高级别时,系统会在 APK 中解压缩 DEX 文件
当 minSdk
= 28 或
。这会导致 APK 大小增加
在设备上的安装大小,并且下载大小大致相同。
如需强制 AGP 改为打包压缩后的 DEX 文件,您可以添加
添加到 build.gradle
文件中:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
使用 DSL 打包压缩后的原生库
我们建议以未压缩的形式打包原生库
从而缩减应用安装大小、缩减应用下载大小和提升应用运行速度
为用户节省了宝贵的时间不过,如果您希望 Android Gradle 插件
在构建应用时打包压缩的原生库、设置
useLegacyPackaging
添加到应用的 build.gradle
文件中的 true
:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
useLegacyPackaging
标志替换了清单属性 extractNativeLibs
。如需了解更多背景信息,请参阅版本说明
默认情况下,原生库以未压缩的形式打包。