升级Gradle3.0

本文介绍了Android Gradle 3.0的大版本升级,包括性能提升如构建速度加快,依赖配置接口的改变如`api`和`implementation`的引入,以及升级过程中可能遇到的问题和解决方案,旨在帮助开发者顺利迁移。
摘要由CSDN通过智能技术生成

概述

Android Gradle 3.0.0插件是一个大版本的升级,对多个module带来了显著的性能提升。但同时也改变了一些此插件的行为,DSL和APIS。

升级到Gradle3.0.0会带来以下的性能提升:

  • 由于构建per-call dexing提高了构建速度,每个类编译成独立的DEX文件,并且仅仅被修改的类重新编译。为了提高构建APK的速度,需要设置minSdkVersion到20,或者更低但使用 legacy multi-dex
  • 当改变依赖项时,Gradle通过不访问依赖项的API的module不重新编译的方式来提高构建速度。通过使用Gradle的新的依赖项的配置(implementation, api, compileOnly, and runtimeOnly),可以严格的控制依赖项的API的暴露。

升级

配置Gradle版本

Android plugin 3.0.0 要求Gradle4.1或者更高的版本。

需要在gradle-wrapper.properties文件中配置下列的内容:

distributionUrl=\
  https\://services.gradle.org/distributions/gradle-4.1-all.zip

配置Android Gradle Plugin

如果使用Android Studio 3.0或者更新版本,会提示自动更新到最新版本的Android plugin。对于手动更新工程,在工程级下的 build.gradle 配置如下的内容。

buildscript {
    repositories {
        ...
        // You need to add the following repository to download the
        // new plugin.
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
    }
}

NOTICE:

对于多模块和复合构建,如果Android插件每次构建不止一次加载,则可能会出现构建错误,可以查看常见错误进行修复。

新的依赖配置接口

问题描述

要理解旧的Gradle插件2.0构建系统的局限性,请考虑以下具有多层模块的项目:

多模块

看最底层的模块,基本上可以做出两种不同的改变:

  1. Implementation change: 内部实现改变,不修改模块的外部接口
  2. Application binary interface (ABI) change: 修改模块的外部接口

Note: 在下面的图形中,重新编译的模块将会以红色高亮

Implementation change

由于模块的外部接口不变,Gradle将只重新编译该模块。所有的引用的模块都将保持不变。

多模块

在这种情况下没问题。

ABI change

当外部模块的接口改变,那引用此模块的module也需要重新编译。

two_layout

但是这些模块可能直接通过自己的接口暴露底层模块的一部分!所以为了完全安全,还需要重新编译。

因此,Gradle将有效地需要重新编译所有模块。

final state

现在我们遇到了一个很大的问题:一个代码更改导致所有模块被重新编译。造成这种情况的根本原因是Gradle不知道是否通过另一个模块泄漏了此模块的接口。

Android Gradle插件3.0的修改

最新的Android Gradle 3.0插件要求您明确定义是否泄漏模块的接口。基于此来判断是否重新编译。

因此 compile</

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值