Android Studio 编译系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于编译 Android 应用的功能。虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。
本页将介绍如何让 Gradle 工具保持最新状态,以及最近的更新都包含哪些内容。
要详细了解如何使用 Gradle 配置 Android 编译版本,请参阅以下页面:
要详细了解 Gradle 编译系统,请参阅 Gradle 用户指南。
在更新 Android Studio 时,您可能会收到将 Android Gradle 插件自动更新为最新可用版本的提示。您可以选择接受该更新,也可以根据项目的编译要求手动指定版本。
您可以在 Android Studio 的 File > Project Structure > Project 菜单中指定插件版本,也可以在顶级 build.gradle
文件中进行指定。该插件版本适用于 Android Studio 项目中内置的所有模块。以下示例是从 build.gradle
文件中将插件的版本设置为 3.4.2:
buildscript {
repositories {
// Gradle 4.1 and higher include support for Google's Maven repo using
// the google() method. And you need to include this repo to download
// Android Gradle plugin 3.0.0 or higher.
google()
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
}
}
注意:请勿在版本号中使用动态依赖项(例如 'com.android.tools.build:gradle:2.+'
),否则可能会导致意外的版本更新和难以解析的版本差异。
如果指定的插件版本尚未下载,则 Gradle 会在您下次编译项目时进行下载;或者,您也可以在 Android Studio 菜单栏中依次点击 Tools > Android > Sync Project with Gradle Files 进行下载。
在更新 Android Studio 时,您可能会收到一并将 Gradle 更新为最新可用版本的提示。您可以选择接受该更新,也可以根据项目的编译要求手动指定版本。
下表列出了各个 Android Gradle 插件版本所需的 Gradle 版本。要获得最佳性能,您应该使用 Gradle 和插件这两者的最新版本。
插件版本 | 所需的 Gradle 版本 |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1+ |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
3.2.0 - 3.2.1 | 4.6+ |
3.3.0 - 3.3.2 | 4.10.1+ |
3.4.0+ | 5.1.1+ |
您可以在 Android Studio 的 File > Project Structure > Project 菜单中指定 Gradle 版本,也可以通过在 gradle/wrapper/gradle-wrapper.properties
文件中修改 Gradle 分发参考来指定。以下示例是从 gradle-wrapper.properties
文件中将 Gradle 的版本设置为 5.1.1。
...
distributionUrl = https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
...
此版本的 Android 插件需要使用以下工具:
Gradle 5.1.1 或更高版本。要了解详情,请阅读有关更新 Gradle 的部分。
注意:如果使用的是 Gradle 5.0 及更高版本,则默认的 Gradle 守护进程内存堆大小会从 1 GB 降到 512 MB。这可能会导致编译性能退化。要替换此默认设置,请在项目的 gradle.properties
文件中指定 Gradle 守护进程堆大小。
SDK Build Tools 28.0.3 或更高版本。
3.4.2(2019 年 7 月)
本次要更新支持 Android Studio 3.4.2,修复了各种错误并做出了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
3.4.1(2019 年 5 月)
本次要更新支持 Android Studio 3.4.1,修复了各种错误并做出了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
新的 Lint 检查依赖项配置:更改了 lintChecks
的行为并引入了新的依赖项配置 lintPublish
,以便您可以更好地控制打包在 Android 库中的 Lint 检查。
lintChecks
:您应该将这个现有配置用于您想仅在本地编译项目时运行的 Lint 检查。如果您之前是使用 lintChecks
依赖项配置将 Lint 检查包含在已发布的 AAR 中,则需要迁移这些依赖项,以改用新的 lintPublish
配置(如下所述)。lintPublish
:请针对您想要在已发布的 AAR 中包含 Lint 检查,在库项目中使用这个新配置(如下所示)。这意味着,使用库的项目也会应用那些 Lint 检查。以下代码示例在本地 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')
}
一般来说,打包任务和为任务签名应该会加快整体编译速度。如果您发现与这些任务相关的性能退化,请报告错误。
Android 免安装应用功能插件弃用警告:如果您仍在使用 com.android.feature
插件编译免安装应用,Android Gradle 插件 3.4.0 会向您发出弃用警告。为了确保您仍然可以在未来版本的插件上编译免安装应用,请迁移您的免安装应用,以使用动态功能插件,这样您还可以通过单个 Android App Bundle 发布安装版应用和免安装应用。
R8 默认处于启用状态:R8 将脱糖、压缩、混淆、优化和 dex 处理整合到一个步骤中,从而显着提升了编译性能。R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。
下图简要介绍了 R8 引入之前的编译流程。
现在,有了 R8,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。
请注意,R8 旨在与您现有的 ProGuard 规则配合使用,因此您可能不需要采取任何操作即可从 R8 中受益。但是,相对专为 Android 项目设计的 ProGuard 而言,R8 是一项不同的技术,因此压缩和优化可能会导致移除 ProGuard 可能没有的代码。因此,在这种不太可能的情况下,您可能需要添加其他规则,以在编译输出中保留这些代码。
如果您在使用 R8 时遇到问题,请阅读 R8 兼容性常见问题解答一文,以检查是否有针对您的问题的解决方案。如果没有记录在案的解决方案,请报告错误。您可以停用 R8,为此只需将以下其中一行内容添加到项目的 gradle.properties
文件即可:
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
注意:对于指定编译类型,如果您在应用模块的 build.gradle
文件中将 useProguard
设置为 false
,Android Gradle 插件会使用 R8 压缩该编译类型的应用代码,无论您是否在项目的 gradle.properties
文件中停用 R8 都是如此。
ndkCompile
已弃用:现在,如果您尝试使用 ndkBuild
来编译原生库,就会收到编译错误。您应改用 CMake 或 ndk-build 将 C 和 C++ 代码添加到您的项目中。
虽然目前并未强制要求正确使用唯一软件包名称,但在插件以后的版本中这项要求会变得更为严格。在 Android Gradle 插件版本 3.4.0 上,您可以选择检查自己的项目是否声明了可接受的软件包名称,具体方法是将下面这行内容添加到 gradle.properties
文件中。
android.uniquePackageNames = true
要详细了解如何通过 Android Gradle 插件设置软件包名称,请参阅设置应用 ID 一文。
此版本的 Android 插件需要使用以下工具:
Gradle 4.10.1 或更高版本。要了解详情,请阅读有关更新 Gradle 的部分。
注意:如果使用的是 Gradle 5.0 及更高版本,则默认的 Gradle 守护进程内存堆大小会从 1 GB 降到 512 MB。这可能会导致编译性能退化。要替换此默认设置,请在项目的 gradle.properties
文件中指定 Gradle 守护进程堆大小。
SDK Build Tools 28.0.3 或更高版本。
3.3.2(2019 年 3 月)
本次要更新支持 Android Studio 3.3.2,修复了各种错误并做出了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
3.3.1(2019 年 2 月)
本次要更新支持 Android Studio 3.3.1,修复了各种错误并做出了多项性能改进。
改进了类路径同步:在解析对运行时和编译时类路径的依赖项时,Android Gradle 插件会尝试解决出现在多个类路径中的依赖项的某些下游版本冲突问题。
例如,如果运行时类路径包含库 A 版本 2.0,而编译类路径包含库 A 版本 1.0,则插件会自动将对编译类路径的依赖项更新为库 A 版本 2.0,以避免错误。
不过,如果运行时类路径包含库 A 版本 1.0,而编译时类路径包含库 A 版本 2.0,插件不会将对编译类路径的依赖项降级为库 A 版本 1.0,并且您会收到错误。要了解详情,请参阅解决类路径之间的冲突问题部分。
改进了使用注解处理器时的增量 Java 编译:此更新通过在使用注解处理器的过程中改进对增量 Java 编译的支持来缩短编译时间。
注意:此功能与 Gradle 4.10.1 及更高版本兼容;但由于 Gradle 问题 8194,与 Gradle 5.1 并不兼容。
对于不使用 Kapt 的项目(仅使用 Java 的项目):如果您使用的注解处理器都支持增量注解处理,则会默认启用增量 Java 编译。要监控增量注解处理器的采用情况,请参见 Gradle 问题 5277。
但是,如果有一个或多个注解处理器不支持增量编译,便不会启用增量 Java 编译。不过,您可以在 gradle.properties
文件中加入以下标记:
android.enableSeparateAnnotationProcessing=true
当您加入此标记后,Android Gradle 插件会在一个单独的任务中执行多个注解处理器,并允许 Java 编译任务以增量方式运行。
使用过时的 API 时显示更详细的调试消息:现在,当插件检测到使用的 API 已不再受支持时,会提供更详细的信息,以帮助您确定 API 的使用位置。要查看其他信息,您需要在项目的 gradle.properties
文件中加入以下内容:
android.debug.obsoleteApi=true
您还可以通过在命令行中传递 -Pandroid.debug.obsoleteApi=true
来启用该标记。
您可以使用命令行运行对动态功能模块的插桩测试。
延迟任务配置:现在,插件会使用 Gradle 的新任务创建 API 来避免初始化和配置完成当前编译所不需要的任务(或执行任务图表上未列出的任务)。例如,如果您有多个编译变体(如“发布”和“调试”编译变体),并且正在编译应用的“调试”版本,则该插件可避免初始化和配置应用“发布”版本的任务。
如果调用 Variants API 中的某些旧方法(例如 variant.getJavaCompile()
),可能仍会强制执行任务配置。为了确保您的编译会针对延迟任务配置进行优化,请调用新方法,而不是返回 TaskProvider
对象(例如 variant.getJavaCompileProvider()
)。
如果您执行自定义编译任务,请了解如何适应 Gradle 的新任务创建 API。
对于指定的编译类型,在设置 useProguard false
时,插件现在会使用 R8(而不是 ProGuard)来压缩和混淆应用的代码和资源。要详细了解 R8,请阅读 Android 开发者博客上发布的这篇博文。
为库项目更快生成 R 类:以前,Android Gradle 插件会为项目的每个依赖项生成一个 R.java
文件,然后将这些 R 类和您应用的其他类一起编译。现在,插件会直接生成包含应用的已编译 R 类的 JAR,而不会先编译中间的 R.java
类。这项优化不仅可以显着提升包含多个库子项目和依赖项的项目的编译性能,还可以加快在 Android Studio 中编制索引的速度。
编译 Android App Bundle 时,由以 Android 6.0(API 级别 23)或更高版本为目标平台的 App Bundle 生成的 APK 现在默认包含原生库的未压缩版本。这项优化无需设备制作库的副本,因此减少了应用占用的存储空间。如果您想要停用此优化,请在 gradle.properties
文件中添加以下内容:
android.bundle.enableUncompressedNativeLibs = false
插件会强制实施某些第三方插件的最低版本。
单变体项目同步:将项目与编译配置同步是让 Android Studio 了解项目结构的重要步骤。不过,对于大型项目,此过程可能非常耗时。如果您的项目使用了多个编译变体,那么您现在可以限定仅同步当前所选的变体,从而优化项目同步操作。
您需要搭配使用 Android Studio 3.3(或更高版本)与 Android Gradle 插件 3.3.0(或更高版本),才能启用此优化。满足这些要求后,IDE 会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用此优化。
要手动启用此优化功能,请依次点击 File > Settings > Experimental > Gradle(在 Mac 上,则依次点击 Android Studio > Preferences > Experimental > Gradle),然后选中 Only sync the active variant 复选框。
注意:此优化完全支持包含 Java 和 C++ 语言的项目,部分支持包含 Kotlin 语言的项目。在为包含 Kotlin 内容的项目启用此优化时,Gradle 同步会回退到在内部使用完整的变体。
自动下载缺失的 SDK 软件包:此功能已经过扩展,可支持 NDK。要了解详情,请阅读 Gradle 自动下载缺失软件包部分。
Android Gradle 插件 3.3.0 修复了以下问题:
android.support.v8.renderscript.RenderScript
,而不是 AndroidX 版本androidx-rs.jar
包含静态绑定的 annotation.AnyRes
build.gradle
文件中手动设置 Build Tools 版本此版本的 Android 插件需要使用以下工具:
3.2.1(2018 年 10 月)
通过此次更新,您无需再为 SDK Build Tools 指定版本。Android Gradle 插件现在默认使用版本 28.0.3。
支持编译 Android App Bundle:Android App Bundle 是一种全新的上传格式,其中包含您应用的所有经过编译的代码和资源,但 APK 生成及签名则延后到 Google Play 商店来完成。您无需再编译、签署和管理多个 APK,而用户也可以获得更小且已针对其设备优化的下载内容。要了解详情,请阅读 Android App Bundle 简介一文。
支持在使用注解处理器时加快增量编译速度:AnnotationProcessorOptions
DSL 现在会扩展 CommandLineArgumentProvider
,这可让您或注解处理器作者使用增量编译属性类型注解来注解处理器的参数。如果使用这些注解,便可提高增量和缓存整洁编译的正确性和性能。要了解详情,请阅读向注解处理器传递参数部分。
适用于 AndroidX 的迁移工具:在搭配使用 Android Gradle 插件 3.2.0 与 Android 3.2 及更高版本时,您只需从菜单栏中依次选择 Refactor > Migrate to AndroidX,便可迁移项目的本地依赖项和 Maven 依赖项,以使用新的 AndroidX 库。使用此迁移工具还会在 gradle.properties
文件中将以下标记设置为 true
:
android.useAndroidX
:如果设置为 true
,Android 插件会使用对应的 AndroidX 库,而非支持库。如未指定此标记,该插件会默认将其设置为 false
。android.enableJetifier
:如果设置为 true
,Android 插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用 AndroidX。如未指定此标记,该插件会默认将其设置为 false
。只有在 android.useAndroidX
也被设置为 true
时,您才能将此标记设置为 true
,否则就会收到编译错误。要了解详情,请参阅 AndroidX 概览一文。
新的代码压缩器 R8:R8 是一种用于执行代码压缩和混淆的新工具,替代了 ProGuard。您只需将以下内容添加到项目的 gradle.properties
文件中,即可开始使用 R8 的预览版本:
android.enableR8 = true
AAPT2 现在位于 Google 的 Maven 存储区中。要使用 AAPT2,请确保您的 build.gradle
文件中包含 google()
依赖项,如下所示:
buildscript {
repositories {
google() // here
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
allprojects {
repositories {
google() // and here
jcenter()
}
原生多 dex 处理现已默认处于启用状态。以前版本的 Android Studio 会在将应用的调试版本部署到搭载 Android API 级别 21(或更高级别)的设备时启用原生多 dex 处理。现在,无论您是要部署到设备,还是要编译 APK 以供发布,Android Gradle 插件都会针对所有设置为 minSdkVersion=21
(或更高版本)的模块启用原生多 dex 处理。
该插件现在会强制执行最低版本的 protobuf 插件 (0.8.6)、Kotlin 插件 (1.2.50) 和 Crashlytics 插件 (1.25.4)。
在指定模块名称时,功能模块插件 com.android.feature
现在只会强制使用字母、数字和下划线。例如,如果您的功能模块名称包含连字符,您会收到编译错误。此行为与动态功能模块插件的行为相符。
此版本的 Android 插件需要使用以下工具:
android.buildToolsVersion
属性来指定 Build Tools 的版本。默认情况下,该插件会使用所需的最低版本。默认情况下,Android Studio 现在会使用名为 D8 的新 DEX 编译器。DEX 编译就是将 .class
字节码转换为用于 Android 运行时(对于较早版本的 Android,则是用于 Dalvik)的 .dex
字节码的过程。与之前的编译器(称为 DX)相比,D8 的编译速度更快,输出的 DEX 文件更小,同时却能保持相同甚至更出色的应用运行时性能。
D8 应该不会改变您的日常应用开发工作流程。但是,如果您遇到与新编译器有关的任何问题,请报告错误。您可以通过在项目的 gradle.properties
文件中加入以下内容来暂时停用 D8 并使用 DX:
android.enableD8=false
对于使用 Java 8 语言功能的项目,系统会默认启用增量脱糖。您可以通过在项目的 gradle.properties
文件中指定以下内容来停用增量脱糖:
android.enableIncrementalDesugaring=false.
预览版用户:如果您已在使用预览版 D8,则请注意,该版本现在会针对 SDK Build Tools(而非 JDK)中包含的库进行编译。因此,如果您访问的 API 存在于 JDK 而非 SDK Build Tools 库中,则会收到编译错误。
在编译分别以不同 ABI 为目标的多个 APK 时,默认情况下,插件不会再针对以下 ABI 生成 APK:mips
、mips64
和 armeabi
。
如果您想编译以上述 ABI 为目标的 APK,必须使用 NDK r16b 或更低版本,并在 build.gradle
文件中指定这些 ABI,如下所示:
splits {
abi {
include 'armeabi', 'mips', 'mips64'
...
}
}
在为 Android 免安装应用编译配置 APK 时,针对语言的配置拆分项现在默认按根语言分组。例如,如果您的应用包含用于 zh-TW
或 zh-CN
语言区域的资源,Gradle 将在针对 zh
语言的配置拆分项中打包这些资源。您可以通过使用 include
属性定义自己的分组来替换此行为,如下所示:
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"
}
}
现在,Android 插件的编译缓存会排除超过 30 天的缓存条目。
将 "auto"
传递给 resConfig
不会再自动选择要打包到 APK 中的字符串资源。如果继续使用 "auto"
,该插件会打包您的应用及其依赖项提供的所有字符串资源。因此,您应该指定希望插件打包到 APK 中的各个语言区域。
由于本地模块不能依赖应用的测试 APK,因此使用 androidTestApi
配置(而非 androidTestImplementation
)将依赖项添加到插桩测试中会导致 Gradle 发出以下警告:
WARNING: Configuration 'androidTestApi' is obsolete
and has been replaced with 'androidTestImplementation'
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 分析器加入编译的跟踪记录。
此版本的 Android 插件需要使用以下工具:
android.buildToolsVersion
属性了。3.0.1(2017 年 11 月)
本次要更新支持 Android Studio 3.0.1,修复了各种错误并做出了多项性能改进。
implementation
、api
、compileOnly
和 runtimeOnly
)限制将其 API 泄露给其他模块的依赖项。minSdkVersion
设置为 20(或更低数值)并使用旧版多 dex 文件的应用,编译速度应该也会得到改善。gradle.properties
文件中设置 android.enableAapt2=false
,然后通过在命令行中运行 ./gradlew --stop
来重启 Gradle 守护进程。Instrumentation
调用中运行每一项应用测试。因为每个测试都是在自己的 Instrumentation
实例中运行,所以测试之间的共享状态也不会在设备的 CPU 或内存上累积。而且,即使有一个测试崩溃,也只会移除它自己的 Instrumentation
实例,因此其他测试仍会正常运行。
testOptions.execution
,以确定是否使用设备内置的测试编排。如果您想使用 Android Test Orchestrator,则需要指定 ANDROID_TEST_ORCHESTRATOR
(如下所示)。默认情况下,此属性会设置为 HOST
,这会停用设备内置的编配,并且是运行测试的标准方法。 android {
testOptions {
execution 'ANDROID_TEST_ORCHESTRATOR'
}
}
* 新的“androidTestUtil”依赖项配置允许您在运行插桩测试(例如 Android Test Orchestrator)之前安装其他测试帮助程序 APK:
dependencies {
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 免安装应用 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 {
// For ndk-build, instead use the ndkBuild block.
cmake {
...
// Specifies a relative path for outputs from external native
// builds. You can specify any path that's not a subdirectory
// of your project's temporary build/ directory.
buildStagingDirectory "./outputs/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 {
// This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
// and package it with your module. If the module is an Android library,
// other projects that depend on it automatically use the lint checks.
// If the module is an app, lint includes these rules when analyzing the app.
lintChecks project(':lint-checks')
}
outputFile()
对象,或使用 processManifest.manifestOutputFile()
来获取各个变体的清单文件。要了解详情,请参阅 API 变更部分。android.buildToolsVersion
属性了)。默认情况下,插件会针对所用 Android 插件的版本自动使用所需的最低版 Build Tools。buildTypes
块中启用 PNG 处理(如下所示)。默认情况下,会为所有编译版本启用 PNG 处理;但调试编译版本除外,因为它会增加包含许多 PNG 文件的项目的编译时间。因此,为了缩短其他编译类型的编译时间,您应该停用 PNG 处理或将图片转换成 WebP 格式。 android {
buildTypes {
release {
// Disables PNG crunching for the release build type.
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)。
依赖项:
新变化:
cleanBuildCache
任务。变化:
## 2.2.0(2016 年 9 月){:#2-2-0}
依赖项:
新变化:
externalNativeBuild {}
DSL,Gradle 现在可让您链接到自己的原生源代码,并使用 CMake 或 ndk-build 编译原生库。编译原生库后,Gradle 会将它们打包到您的 APK 中。要详细了解如何在 Gradle 中使用 CMake 和 ndk-build,请阅读向您的项目添加 C 和 C++ 代码一文。gradle.properties
文件中添加 android.useOldPackaging=true
来恢复使用旧的打包工具。在使用新的打包工具时,zipalignDebug
任务将不可用。不过,您可以调用 createZipAlignTask(String taskName, File inputFile, File outputFile)
方法来自己创建一个。build.gradle
文件中: android {
...
signingConfigs {
config {
...
v2SigningEnabled false
}
}
}
buildTypes.multiDexKeepProguard
将该配置文件的路径传递给 Gradle。使用此 DSL 与使用 buildTypes.proguardFiles
不同,后者会提供应用的常规 ProGuard 规则,并且不会指定主 DEX 文件的类。android:extractNativeLibs
标记的支持,该标记可在应用安装到设备的过程中缩小应用的大小。如果您在应用清单的
元素中将此标记设置为 false
,Gradle 会将未压缩的对齐版原生库和 APK 打包在一起。这可防止 PackageManager
在安装过程中将原生库从 APK 复制到设备的文件系统,同时还有助于减小应用增量更新。versionNameSuffix
和 applicationIdSuffix
。(问题 59614)变化:
getDefaultProguardFile
现在会返回 Android Plugin for Gradle 提供的默认 ProGuard 文件,并且不再使用 Android SDK 中的那些文件。testCoverageEnabled
设置为 true
后,Jack 现在支持 Jacoco 测试覆盖率。compile
依赖项)会自动应用于编译。您还可以在编译中指定注解处理器,并通过在模块级 build.gradle
文件中使用 javaCompileOptions.annotationProcessorOptions {}
DSL 来传递参数: android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
className 'com.example.MyProcessor'
// Arguments are optional.
arguments = [ foo : 'bar' ]
}
}
}
}
如果要在编译时应用注解处理器,但不将其包含在 APK 中,请使用 annotationProcessor
依赖项范围:
dependencies {
compile 'com.google.dagger:dagger:2.0'
annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
// or use buildVariantAnnotationProcessor to target a specific build variant
}
jackOptions.additionalParameters()
来设置 Jack 的其他标记。以下代码段将 jack.incremental
参数设置为 true
: android {
defaultConfig {
...
jackOptions {
enabled true
additionalParameters("jack.incremental" : true)
}
}
}
如需查看您可以设置的参数的列表,请从命令行中运行以下命令:
java -jar /build-tools/jack.jar --help-properties
gradle.properties
文件中:
# This sets the daemon heap size to 1.5GB.
org.gradle.jvmargs=-Xmx1536M
2.1.3(2016 年 8 月)
此更新需要使用 Gradle 2.14.1 及更高版本。Gradle 2.14.1 加入了一些性能改进、新功能和一个重要的安全修复程序。如需了解详情,请参阅 Gradle 版本说明。
依赖项:
新变化:
注意:Instant Run 目前无法用于 Jack,在使用新的工具链时将被停用。如果您正在为 N 预览版开发应用,并希望使用受支持的 Java 8 语言功能,只需使用 Jack 即可。
build.gradle
文件中: android {
...
compileOptions {
incremental false
}
}
添加了对 dexing-in-process 的支持。dexing-in-process 会在编译流程(而不是单独的外部虚拟机流程)中执行 dex 处理。这样不仅可以让增量编译更快,还可以加快完整编译的速度。对于已将 Gradle 守护进程的最大堆大小设置为不小于 2048 MB 的项目,该功能默认处于启用状态。要进行设置,您可以将以下内容加入到项目的 gradle.properties
文件中:
org.gradle.jvmargs = -Xmx2048m
如果您已经在模块级 build.gradle
文件中为 javaMaxHeapSize
定义值,则需要将 org.gradle.jvmargs
的值设置为“javaMaxHeapSize
+ 1024 MB”的结果。例如,如果您将 javaMaxHeapSize
设置为“2048m”,则需要将以下内容添加到项目的 gradle.properties
文件中:
org.gradle.jvmargs = -Xmx3072m
要停用 dexing-in-process,请在模块级 build.gradle
文件中添加以下代码:
android {
...
dexOptions {
dexInProcess false
}
}
依赖项:
新变化:
maxProcessCount
,以控制可以同时衍生多少个从属的 dex 处理进程。以下代码在模块级 build.gradle
文件中将最大并发进程数设置为 4: android {
...
dexOptions {
maxProcessCount = 4 // this is the default value
}
}
build.gradle
文件中: android {
...
buildTypes {
debug {
minifyEnabled true
useProguard false
}
release {
minifyEnabled true
useProguard true // this is a default setting
}
}
}
resources.txt
文件中。改变的行为:
minSdkVersion
设置为 18 或更高,APK 签名会使用 SHA256。注意:自 Android 6.0(API 级别 23)开始,Android Keystore 提供程序不再支持 DSA 密钥。
修复的问题: