小记Android Gradle插件 Iven 记于 20190522 药厂

    xiaoxiao2022-07-02  98

    2016.04年 Android Gradle插件2.x

    通过支持字节码注入,将代码和资源更新推送到模拟器或物理设备上正在运行的应用程序,启用Instant Run。添加了对增量构建的支持,即使应用程序未运行也是如此。通过将Android调试桥的增量更改推送到连接的设备,可以提高完整构建时间 。添加以控制可以同时生成多少个slave dex进程。模块级文件中的以下代码 将最大并发进程数设置为4:maxProcessCountbuild.gradle

    android { ...   dexOptions {     maxProcessCount = 4 //这是默认值} }

     

     

    添加了一个实验性代码缩减器,以支持pre-dexing并减少依赖关系的重新设计,这是Proguard不支持的。这提高了调试版本变体的构建速度。由于实验收缩器不支持优化和混淆,因此您应该为发布版本启用Proguard。要为调试版本启用实验收缩器,请将以下内容添加到模块级build.gradle文件中:

    android { ...   buildTypes {     debug {       minifyEnabled true       useProguard false }     release {       minifyEnabled true       useProguard true //这是默认设置} } }

     

     

    为资源缩减器添加了日志记录支持和改进的性能。资源缩减器现在将其所有操作记录到resources.txt 与Proguard日志文件位于同一文件夹中的文件中。

    2016.08

    使用Jack工具链添加了对N Developer Preview,JDK 8和Java 8语言功能的支持。要了解更多信息,请阅读N预览指南。

    注意: Instant Run当前不适用于Jack,并且在使用新工具链时将被禁用。如果您正在为N预览开发并希望使用受支持的Java 8语言功能,则只需使用Jack。

    添加了对增量Java编译的默认支持,以减少开发期间的编译时间。它通过仅重新编译已更改或需要重新编译的源的部分来实现此目的。要禁用此功能,请将以下代码添加到模块级 build.gradle文件中:

    android { ...   compileOptions {     incremental false } }

     

     

     

     

     

    添加了对dexing-in-process的支持,该过程在构建过程中执行dexing,而不是在单独的外部VM进程中执行。这不仅使增量构建更快,而且还加快了完整构建。对于已将Gradle守护程序的最大堆大小设置为至少2048 MB的项目,默认情况下启用此功能。您可以通过在项目的gradle.properties文件中包含以下内容来完成此操作:

    组织。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插件需要以下内容:

    Gradle 4.1或更高版本。要了解更多信息,请阅读有关更新Gradle的部分 。构建工具26.0.2或更高版本。通过此更新,您不再需要为构建工具指定版本 - 默认情况下,插件使用所需的最低版本。因此,您现在可以删除该android.buildToolsVersion属性。

    3。0。1(2017年11月)

    这是支持Android Studio 3.0.1的次要更新,包括常规错误修复和性能改进。

    优化

    通过细粒度的任务图更好地实现多模块项目的并行性。在对依赖项进行更改时,Gradle通过不重新编译无法访问该依赖项API的模块来执行更快的构建。您应该限制哪些依赖通过泄露其API给其他模块 使用摇篮的新的相关配置: implementation,api,compileOnly,和runtimeOnly。由于每级dexing而增加的构建速度更快。现在,每个类都被编译为单独的DEX文件,并且只有被修改的类才会被重新定义。您还应该期望设置minSdkVersion为20或更低的应用程序的构建速度得到提高,并使用传统的multi-dex。通过优化某些任务以使用chached输出来提高构建速度。要从此优化中受益,您需要首先 启用Gradle构建缓存。使用AAPT2改进了增量资源处理,AAPT2现在默认启用。如果您在使用AAPT2时遇到问题,请 报告错误。您还可以通过android.enableAapt2=false在gradle.properties文件中设置并通过./gradlew --stop从命令行运行重新启动Gradle守护程序来禁用AAPT2 。

    新功能

    变体感知依赖关系管理。在构建模块的某个变体时,该插件现在会自动将本地库模块依赖项的变体与您正在构建的模块的变体进行匹配。包括一个新的功能模块插件,用于支持 Android Instant Apps和Android Instant Apps SDK(您可以使用SDK管理器下载 )。要了解有关使用新插件创建功能模块的更多信息,请阅读 具有多个功能的即时应用的结构。内置支持使用某些Java 8语言功能和Java 8库。 Jack现已弃用,不再需要,您应首先禁用Jack以使用默认工具链中内置的改进Java 8支持。有关更多信息,请参阅使用Java 8语言功能。添加了对使用Android Test Orchestrator运行测试的支持 ,它允许您在自己的调用中运行每个应用程序的测试Instrumentation。因为每个测试都在自己的Instrumentation实例中运行,所以测试之间的任何共享状态都不会累积在设备的CPU或内存上。而且,即使一个测试崩溃,它也会仅删除自己的实例 Instrumentation,因此您的其他测试仍会运行。 添加testOptions.execution以确定是否使用设备上的测试编排。如果要 使用Android Test Orchestrator,则需要指定ANDROID_TEST_ORCHESTRATOR,如下所示。默认情况下,此属性设置为HOST,禁用设备上的业务流程,并且是运行测试的标准方法。

    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插件3.0.0删除了某些API,如果您使用它们,您的构建将会中断。例如,您不能再使用Variants API来访问outputFile()对象或使用它processManifest.manifestOutputFile()来获取每个变体的清单文件。要了解更多信息,请阅读 API更改。您不再需要为构建工具指定版本(因此,您现在可以删除该android.buildToolsVersion属性)。默认情况下,插件会自动使用您正在使用的Android插件版本所需的最低构建工具版本。现在,您可以在buildTypes块中启用PNG运算,如下所示。对于除调试版本之外的所有版本,默认情况下启用PNG运算,因为它会增加包含许多PNG文件的项目的构建时间。因此,为了缩短其他构建类型的构建时间,您应该禁用PNG运算或 将图像转换为WebP。

    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)。

    依赖关系:

    Gradle 3.3或更高。构建工具25.0.0 或更高版本。

    新:

    使用Gradle 3.3,其中包括性能改进和新功能。有关更多详细信息,请参阅Gradle发行说明。构建缓存:存储Android插件在构建项目时生成的某些输出(例如未打包的AAR和预定义的远程依赖项)。使用缓存时,干净的构建要快得多,因为构建系统可以在后续构建期间简单地重用这些缓存的文件,而不是重新创建它们。使用Android插件2.3.0及更高版本的项目默认使用构建缓存。要了解更多信息,请阅读使用Build Cache提高构建速度。 包括清除构建缓存的cleanBuildCache任务。如果您使用的是构建缓存的实验版本(包含在早期版本的插件中),则应将插件更新为最新版本。

    变化:

    支持Android Studio 2.3中包含的对Instant Run的更改。非常大的项目的配置时间应该明显更快。修复了约束布局库自动下载的问题。插件现在使用ProGuard版本5.3.2。包含针对 报告的错误的许多修复程序。遇到问题时请继续提交错误报告。

     

    (2018年3月)3。1。0

    此版本的Android插件需要以下内容:

    Gradle 4.4或更高版本。要了解更多信息,请阅读有关更新Gradle的部分 。构建工具27.0.3或更高版本。请记住,您不再需要使用android.buildToolsVersion属性为构建工具指定版本- 默认情况下,插件使用所需的最低版本。

    新的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时,默认情况下mips,插件不再为以下ABI生成APK:,mips64和armeabi。

    如果要构建以这些ABI为目标的APK,则必须使用 NDK r16b或更低版本并在build.gradle文件中指定ABI ,如下所示:

    分裂{

      abi {

          包括'armeabi' ,'mips' ,'mips64' ... } }

         

     

     

    在 为Android Instant App 构建配置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 Studio无法正确识别复合构建中的依赖项的问题。修复了在单个构建中多次加载Android插件时出现项目同步错误的问题 - 例如,当多个子项目在其buildscript类路径中包含Android插件时。

    3。2。0(2018年9月)

    此版本的Android插件需要以下内容:

    Gradle 4.6或更高版本。要了解更多信息,请阅读有关更新Gradle的部分 。SDK构建工具28.0.3或更高版本。

    3。2。1(2018年10月)

    通过此更新,您不再需要为SDK Build Tools指定版本。Android Gradle插件现在默认使用版本28.0.3。

    新功能

    支持构建Android应用程序包:应用程序包是一种新的上传格式,包括所有应用程序的已编译代码和资源,同时推迟APK生成并签名到Google Play商店。您不再需要构建,签名和管理多个APK,并且用户可以获得针对其设备进行优化的较小下载。要了解更多信息,请阅读 关于Android App Bundles。为提高增量构建支持使用注解处理器速度时: 将AnnotationProcessorOptions DSL现在扩展CommandLineArgumentProvider,使您或注解处理器笔者注释参数为使用处理器 增量生成属性类型注释。使用这些注释可以提高增量和缓存清理构建的正确性和性能。要了解更多信息,请阅读 注释处理器的Pass参数。适用于AndroidX的迁移工具:当使用Android Gradle插件3.2.0和Android 3.2及更高版本时,您可以通过从菜单栏中选择Refactor> Migrate to AndroidX来迁移项目的本地和Maven依赖项以使用新的AndroidX库 。使用此迁移工具还会true在gradle.properties文件中设置以下标志: android.useAndroidX:设置true为时,Android插件使用相应的AndroidX库而不是支持库。如果未指定此标志,则false默认情况下插件会将其设置为。android.enableJetifier:设置true为时,Android插件会自动迁移现有的第三方库,通过重写其二进制文件来使用AndroidX。如果未指定此标志,则false默认情况下插件会将其设置为。您可以将此标志设置为true仅在android.useAndroidX设置为while时 true,否则会出现构建错误。

    要了解更多信息,请阅读AndroidX概述。

    新的代码缩减器,R8: R8是一种用于代码缩减和混淆的新工具,它取代了ProGuard。您可以通过在项目gradle.properties文件中包含以下内容来开始使用R8的预览版本:

    android.enableR8 = true

    行为改变

    现在默认情况下启用D8 Desugaring。AAPT2现在在Google的Maven回购中。要使用AAPT2,请确保google()您的build.gradle文件具有 依赖关系,如下所示:

    buildscript {

          repositories {

              google() // here

              jcenter()

          }

          dependencies {

              classpath 'com.android.tools.build:gradle:3.2.0'

          }

      }

      allprojects {

          repositories {

              google() // and here

              jcenter()

      }

    现在默认启用本机multidex。在将应用程序的调试版本部署到运行Android API级别21或更高级别的设备时,以前版本的Android Studio启用了本机multidex。现在,无论您是部署到设备还是构建APK以进行发布,Android Gradle插件都可以为所有设置minSdkVersion=21或更高的模块启用本机multidex 。该插件现在强制执行protobuf插件(0.8.6),Kotlin插件(1.2.50)和Crashlytics插件(1.25.4)的最低版本。com.android.feature现在,在指定模块名称时,功能模块插件仅强制使用字母,数字和下划线。例如,如果您的功能模块名称包含破折号,则会出现构建错误。此行为与动态要素模块插件的行为相匹配。 3。3。0(2019年1月)

    此版本的Android插件需要以下内容:

    Gradle 4.10.1或更高版本。要了解更多信息,请阅读有关更新Gradle的部分。

    注意:使用Gradle 5.0及更高版本时,默认的Gradle守护程序内存堆大小 从1 GB减少到512 MB。这可能会导致构建性能下降。要覆盖此默认设置,请 在项目文件中指定Gradle守护程序堆大小gradle.properties。

    SDK构建工具28.0.3或更高版本。

    3。3。2(2019年3月)

    此次更新支持Android Studio 3.3.2,包括各种错误修复和性能改进。要查看可记录的错误修复列表,请阅读 Release Updates博客上的相关帖子 。

    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(大多数仅限Kotlin项目和Kotlin-Java混合项目)的项目:即使使用数据绑定或retro-lambda插件,也会启用增量Java编译。Kapt任务的注释处理尚未增量。对于不使用Kapt的项目(仅Java项目):如果您使用的注释处理器都支持 增量注释处理,则默认情况下会启用增量Java编译。要监控增量注释处理器的采用情况,请观看 Gradle issue 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 Developer's Blog中的此博客文章。库项目的R类生成速度更快:以前,Android Gradle插件会R.java为每个项目的依赖项生成一个文件,然后在应用程序的其他类中编译这些R类。该插件现在可以直接生成包含应用程序编译的R类的JAR,而无需先构建中间R.java类。此优化可以显着提高包含许多库子项目和依赖项的项目的构建性能,并提高Android Studio中的索引速度。构建Android应用程序包时,默认情况下,从该应用程序包生成的以Android 6.0(API级别23)或更高版本为目标的APK现在包含未压缩的本机库版本。此优化避免了设备制作库副本的需要,从而减少了应用程序的磁盘大小。如果您要禁用此优化,请将以下内容添加到您的gradle.properties文件中:

    android.bundle.enableUncompressedNativeLibs = false

    该插件强制执行某些第三方插件的最低版本。单变量项目同步: 将项目 与构建配置同步是让Android Studio了解项目结构的重要一步。但是,对于大型项目而言,此过程可能非常耗时。如果您的项目使用多个构建变体,您现在可以通过将项目同步限制为仅当前选择的变体来优化项目同步。

    您需要在Android Gradle Plugin 3.3.0或更高版本中使用Android Studio 3.3或更高版本来启用此优化。满足这些要求后,IDE会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用优化。

    要手动启用此优化,请单击文件>设置>实验 > Gradle(Android Studio>首选项>实验> Mac上的Gradle),然后选中仅同步活动变体复选框。

    注意:此优化完全支持包含Java和C ++语言的项目,并且对Kotlin有一些支持。在为具有Kotlin内容的项目启用优化时,Gradle同步将回退到内部使用完整变体。

    自动下载缺少的SDK包:此功能已扩展为支持NDK。要了解更多信息,请阅读 使用Gradle自动下载缺少的软件包。

    3。3。0(2019年4月)

    此版本的Android插件需要以下内容:

    Gradle 5.1.1或更高版本。要了解更多信息,请阅读有关更新Gradle的部分。

    注意:使用Gradle 5.0及更高版本时,默认的Gradle守护程序内存堆大小 从1 GB减少到512 MB。这可能会导致构建性能下降。要覆盖此默认设置,请 在项目文件中指定Gradle守护程序堆大小gradle.properties。

    SDK构建工具28.0.3或更高版本。

    3.4.1(2019年5月)

    此次更新支持Android Studio 3.4.1,包括各种错误修复和性能改进。要查看可记录的错误修复列表,请阅读 Release Updates博客上的相关帖子 。

    新功能

    新的lint检查依赖项配置:lintChecks已更改行为并lintPublish引入了新的依赖项配置,以便您更好地控制在Android库中打包的lint检查。 lintChecks:这是一个现有配置,您应该将其用于您希望仅在本地构建项目时运行的lint检查。如果您以前使用lintChecks依赖关系配置在已发布的AAR中包含lint检查,则需要迁移这些依赖关系,而不是使用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 Instant Apps功能插件弃用警告:如果您仍在使用该com.android.feature插件构建您的即时应用,Android Gradle插件3.4.0将向您发出弃用警告。为了确保您仍然可以在插件的未来版本上构建即时应用程序,请将您的即时应用程序迁移到使用 动态功能插件,这也允许您从单个Android应用程序包发布已安装和即时应用程序体验。默认情况下启用R8: R8在一个步骤中集成了desugaring,收缩,混淆,优化和dexing,从而 显着提高了构建性能。R8是在Android Gradle插件3.3.0中引入的,现在默认为使用插件3.4.0及更高版本的应用程序和Android库项目启用。

    下图提供了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文件。

    ndkCompile不推荐使用:如果您尝试使用ndkBuild编译本机库,则现在会出现生成错误 。您应该使用CMake或ndk-build将 C和C ++代码添加到项目中。

    最新回复(0)