2016.04年 Android Gradle插件2.x
android { ... dexOptions { maxProcessCount = 4 //这是默认值} }
android { ... buildTypes { debug { minifyEnabled true useProguard false } release { minifyEnabled true useProguard true //这是默认设置} } }
2016.08
注意: Instant Run当前不适用于Jack,并且在使用新工具链时将被禁用。如果您正在为N预览开发并希望使用受支持的Java 8语言功能,则只需使用Jack。
android { ... compileOptions { incremental false } }
组织。gradle 。jvmargs = - Xmx2048m
如果已在模块级 文件中定义了值,则需要将值设置为 + 1024 MB。例如,如果您设置 为“2048m”,则需要将以下内容添加到项目的文件中:javaMaxHeapSizebuild.gradleorg.gradle.jvmargsjavaMaxHeapSizejavaMaxHeapSizegradle.properties
组织。gradle 。jvmargs = - Xmx3072m
要禁用dexing-in-process,请将以下代码添加到模块级build.gradle文件中:
android { ... dexOptions { dexInProcess false } }
(2017年10月)Android Gradle插件3。0。0
Android Gradle插件3.0.0包含各种旨在解决大型项目性能问题的更改。
例如,在 具有~130个模块和大量外部依赖项(但没有代码或资源)的 示例框架项目中,您可以体验类似于以下的性能改进:
Android插件版+ Gradle版 |
Android插件2.2.0 + Gradle 2.14.1 |
Android插件2.3.0 + Gradle 3.3 |
Android插件3.0.0 + Gradle 4.1 |
配置(例如运行./gradlew --help) |
~2分钟 |
~9秒 |
~2.5秒 |
1行Java更改(实现更改) |
〜2分钟15秒 |
~29秒 |
~6.4秒 |
其中一些更改会破坏现有版本。因此,在使用新插件之前,您应该考虑迁移项目的工作。
如果您没有遇到上述性能改进,请 提交错误 并使用Gradle Profiler包含构建的跟踪 。
此版本的Android插件需要以下内容:
3。0。1(2017年11月)
这是支持Android Studio 3.0.1的次要更新,包括常规错误修复和性能改进。
优化
新功能
android {
testOptions {
execution'ANDROID_TEST_ORCHESTRATOR ' } }
*新的`androidTestUtil`依赖配置允许您在运行仪器测试之前安装另一个测试助手APK,例如Android Test Orchestrator:
依赖项{
androidTestUtil'com.android.support.test :orchestrator:1.0.0' ... }
*添加了`testOptions.unitTests.includeAndroidResources`以支持需要Android资源的单元测试,例如[Roboelectric](http://robolectric.org/)。当您将此属性设置为“true”时,插件会在运行单元测试之前执行资源,资产和清单合并。然后,您的测试可以检查类路径上的`com / android / tools / test_config.properties`以获取以下键:*`android_merged_assets`:合并资产目录的绝对路径。
注意:对于库模块,合并的资产不包含依赖项的资产(请参阅[问题#65550419](https://issuetracker.google.com/65550419))。
*`android_merged_manifest`:合并清单文件的绝对路径。*`android_merged_resources`:合并资源目录的绝对路径,它包含模块及其所有依赖项的所有资源。*`android_custom_package`:最终R类的包名。如果动态修改应用程序ID,则此程序包名称可能与应用程序清单中的`package`属性不匹配。*支持[字体作为资源](/ guide / topics / ui / look-and-feel / fonts-in-xml.html)(这是[Android 8.0(API级别26)]中引入的新功能(/ about /versions/oreo/index.html))。*使用[Android Instant Apps SDK 1.1](/ topic / instant-apps / release-notes.html #android_instant_apps_development_sdk_v110)及更高版本支持特定于语言的APK。欲获得更多信息,请参阅[为纯拆分配置构建](/ topic / instant-apps / guides / config-splits.html)。*您现在可以更改外部本机构建项目的输出目录,如下所示:
android { ... externalNativeBuild { //对于ndk-build,改为使用ndkBuild块。 cmake { ... //指定外部本机//构建的输出的相对路径。您可以指定任何不是项目临时构建/目录的子目录的路径。 buildStagingDirectory “./ output / cmake” } } }
*从Android Studio构建本机项目时,您现在可以[使用CMake 3.7或更高版本](/ studio / projects / add-native-code.html#vanilla_cmake)。*新的`lintChecks`依赖项配置允许您构建定义自定义lint规则的JAR,并将其打包到您的AAR和APK项目中。您的自定义lint规则必须属于一个单独的项目,该项目输出单个JAR并且仅包含[`compileOnly`](https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_plugin_and_dependency_management)依赖项。然后,其他应用程序和库模块可以使用`lintChecks`配置依赖于您的lint项目:
dependencies { //这告诉Gradle插件将lint-checks'构建到lint.jar文件中//并将其打包到您的模块中。如果模块是Android库,//依赖它的其他项目会自动使用lint检查。//如果模块是应用程序,则lint在分析应用程序时包含这些规则。 lintChecks项目(':lint-checks' )}
行为改变
android {
buildTypes {
release { //为发布版本类型禁用PNG运算。 crunchPngs false } } }
* Android插件现在自动构建您在外部CMake项目中配置的可执行目标。*您现在必须使用`annotationProcessor`依赖关系配置[添加注释处理器](/ studio / build / dependencies#annotation_processor)到处理器类路径。*使用已弃用的`ndkCompile`现在受到更多限制。您应该迁移到使用CMake或ndk-build来编译要包装到APK中的本机代码。要了解更多信息,请阅读[从ndkcompile迁移](/ studio / projects / add-native-code.html#ndkCompile)。## 2。3。0(2017年2月){:#2-3-0}
2。3。3(2017年6月)
这是一个次要更新,增加了与Android Studio 2.3.3的兼容性 。
2。3。2(2017年5月)
这是一个次要更新,增加了与Android Studio 2.3.2的兼容性 。
2。3。1(2017年4月)
这是Android插件2.3.0的一个小更新,修复了一些物理Android设备无法与 Instant Run一起正常运行的问题(请参阅问题#235879)。
依赖关系:
新:
变化:
(2018年3月)3。1。0
此版本的Android插件需要以下内容:
新的DEX编译器,D8
默认情况下,Android Studio现在使用名为D8的新DEX编译器。DEX编译是将.class 字节码转换.dex为Android Runtime(或Dalvik,适用于旧版Android)的字节码的过程。与之前的编译器(称为DX)相比,D8编译速度更快,输出更小的DEX文件,同时具有相同或更好的应用运行时性能。
D8不应该改变您的日常应用开发工作流程。但是,如果您遇到与新编译器相关的任何问题,请 报告错误。您可以通过在项目的gradle.properties文件中包含以下内容来暂时禁用D8并使用DX :
android.enableD8=false
对于使用Java 8语言功能的项目, 默认情况下启用增量去糖。您可以通过在项目gradle.properties文件中指定以下内容来禁用它:
android.enableIncrementalDesugaring=false.
预览用户:如果您已经在使用D8的预览版,请注意它现在针对SDK构建工具中包含的库进行编译 - 而不是JDK。因此,如果您正在访问JDK中存在的API而不是SDK构建工具库中存在的API,则会出现编译错误。
行为改变
如果要构建以这些ABI为目标的APK,则必须使用 NDK r16b或更低版本并在build.gradle文件中指定ABI ,如下所示:
分裂{
abi {
包括'armeabi' ,'mips' ,'mips64' ... } }
splits {
language {
enable true
// Each string defines a group of locales that
// Gradle should package together.
include "in,id",
"iw,he",
"fil,tl,tgl",
"yue,zh,zh-TW,zh-CN"
}
}
WARNING: Configuration 'androidTestApi' is obsolete
and has been replaced with 'androidTestImplementation'
修复
3。2。0(2018年9月)
此版本的Android插件需要以下内容:
3。2。1(2018年10月)
通过此更新,您不再需要为SDK Build Tools指定版本。Android Gradle插件现在默认使用版本28.0.3。
新功能
要了解更多信息,请阅读AndroidX概述。
android.enableR8 = true
行为改变
buildscript {
repositories {
google() // here
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
allprojects {
repositories {
google() // and here
jcenter()
}
此版本的Android插件需要以下内容:
注意:使用Gradle 5.0及更高版本时,默认的Gradle守护程序内存堆大小 从1 GB减少到512 MB。这可能会导致构建性能下降。要覆盖此默认设置,请 在项目文件中指定Gradle守护程序堆大小gradle.properties。
3。3。2(2019年3月)
此次更新支持Android Studio 3.3.2,包括各种错误修复和性能改进。要查看可记录的错误修复列表,请阅读 Release Updates博客上的相关帖子 。
3。3。1(2019年2月)
此次更新支持Android Studio 3.3.1,包括各种错误修复和性能改进。
新功能
例如,如果运行时类路径包含库A版本2.0并且编译类路径包含库A版本1.0,则插件会自动将编译类路径的依赖性更新为库A版本2.0以避免错误。
但是,如果运行时类路径包含库A版本1.0并且编译包含库A版本2.0,则插件不会将编译类路径上的依赖项降级为库A版本1.0,并且您将收到错误。要了解更多信息,请参阅 修复类路径之间的冲突。
注意:此功能与Gradle 4.10.1及更高版本兼容,但由于Gradle问题8194,Gradle 5.1除外。
但是,如果一个或多个注释处理器不支持增量构建,则不会启用增量Java编译。相反,您可以在gradle.properties文件中包含以下标志:
android.enableSeparateAnnotationProcessing=true
当您包含此标志时,Android Gradle插件会在单独的任务中执行注释处理器,并允许Java编译任务以递增方式运行。
android.debug.obsoleteApi=true
您还可以通过-Pandroid.debug.obsoleteApi=true 从命令行传递来启用该标志。
行为改变
在Variants API中调用某些旧方法(例如 variant.getJavaCompile())可能仍会强制执行任务配置。要确保您的构建针对延迟任务配置进行了优化,请调用替代返回TaskProvider 对象的新方法 ,例如variant.getJavaCompileProvider()。
如果您执行自定义构建任务,请了解如何 适应Gradle的新任务创建API。
android.bundle.enableUncompressedNativeLibs = false
您需要在Android Gradle Plugin 3.3.0或更高版本中使用Android Studio 3.3或更高版本来启用此优化。满足这些要求后,IDE会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用优化。
要手动启用此优化,请单击文件>设置>实验 > Gradle(Android Studio>首选项>实验> Mac上的Gradle),然后选中仅同步活动变体复选框。
注意:此优化完全支持包含Java和C ++语言的项目,并且对Kotlin有一些支持。在为具有Kotlin内容的项目启用优化时,Gradle同步将回退到内部使用完整变体。
3。3。0(2019年4月)
此版本的Android插件需要以下内容:
注意:使用Gradle 5.0及更高版本时,默认的Gradle守护程序内存堆大小 从1 GB减少到512 MB。这可能会导致构建性能下降。要覆盖此默认设置,请 在项目文件中指定Gradle守护程序堆大小gradle.properties。
3.4.1(2019年5月)
此次更新支持Android Studio 3.4.1,包括各种错误修复和性能改进。要查看可记录的错误修复列表,请阅读 Release Updates博客上的相关帖子 。
新功能
以下代码示例在本地Android库项目中使用两个依赖项配置。
dependencies {
// Executes lint checks from the ':lint' project at build time.
lintChecks project(':lint')
// Packages lint checks from the ':lintpublish' in the published AAR.
lintPublish project(':lintpublish')
}
行为改变
下图提供了R8引入之前编译过程的高级概述。
现在,使用R8,desugaring,收缩,混淆,优化和dexing(D8)都可以一步完成,如下图所示。
请记住,R8旨在使用您现有的ProGuard规则,因此您可能不需要采取任何行动从R8中受益。但是,因为它是专为Android项目设计的ProGuard的不同技术,缩小和优化可能会导致删除ProGuard可能没有的代码。因此,在这种不太可能的情况下,您可能需要添加其他规则以将该代码保留在构建输出中。
如果您在使用R8时遇到问题,请阅读 R8兼容性常见问题 以检查您的问题是否有解决方案。如果没有记录解决方案,请报告错误。您可以通过将以下行之一添加到项目的gradle.properties文件来禁用R8 :
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
注意:对于给定的生成类型,如果你设置useProguard到false你的应用程序模块的build.gradle文件,Android的摇篮插件使用R8缩小您的应用程序的代码为构建类型,无论你在你的项目的禁用R8 gradle.properties文件。