Android技术知识Android知识Android开发

[Android、Java]加快gradle构建

2017-03-31  本文已影响447人  Clone丶记忆

熟悉Android studio(安卓死丢丢)或者idea的哥们都能深刻体会到gradle构建的优秀。

同时我们又难以接受的是gradle初始化的缓慢--,老铁,扎心了。

如果你每天是开着VPN不断线,那么可以不用看了 --

其实我们有的时候走心一点可以看到idea(Android studio基于idea社区开源版制作的,所以统称idea)上面任务进度栏那里有提示正在下载gradle,地址如下:

https://services.gradle.org/distributions/gradle-3.3-all.zip

没错,上面的地址就是gradle环境依赖的压缩包,同时在idea的gradle项目build完成后,我们可以在项目目录下面找到一个gradle目录,结构示意如下:

我们直接打开gradle-wapper.properties查看到信息如下:

#Thu Mar 23 21:03:17 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

我们在上面的properties里面也能看到有我们项目需要的gradle的构建版本信息。重点来了,我们在上面可以看到:

distributionBase=GRADLE_USER_HOME

上面的东西可能一样望去不知所以,但是我们大胆猜测GRADLE_USER_HOME这个东西应该是用户的gradle目录,xxxPath可能描述的是某一个路径,这个时候机灵的我们应该百度搜索gradle构建缓存目录,直接点开Android Studio 和 gradle 修改缓存文件夹路径就能看到对gradle缓存目录的描述:

根据老司机经验总结如下:

win:
C:\Users\你的用户名\.gradle

mac:
/Users/你的用户名/.gradle

直接进入.gradle缓存目录,我们一般可以看到如下结构:

我们打开wrapper目录就能印证上面的 wrapper/dists 果然存在,进一步打开,我们能看到内容如下:

gradle.wrapper缓存目录gradle.wrapper缓存目录

惊喜,突然发现我上面的gradle-3.3-all在里面,打开gradle-3.3-all刚刚好查看到gradle-3.3-all.zip也在里面,这恰恰说明这个就是我们gradle项目的构建环境依赖就在这里。

所以聪明一点的老司机们都可以把这个wrapper目录备份下来了,兄弟莫慌,完全不必这个样子。我们只需要把我们下载的gradle压缩包留住就行了。

所以,构建速度加快的思路之文件替换出炉了。在我们新项目第一次构建很久的时候:

上面这样我们就能把第一次gradle构建环境依赖快速加载完成。

当然,更快的是你的项目在打开之前直接把gradle设置成国内源,这样我们的gradle环境就能快速构建了。

葵花宝典,加快gradle项目资源构建、获取速度

Android studio:

  1. 修改gradle.properties,加入以下代码
#Gradle守护进程
org.gradle.daemon=true

#并行项目执行
org.gradle.parallel=true

#取消检查lint输出的增量构建
gradle=build -x lint
  1. 配置项目的build.gradle
buildscript {
    repositories {
        // maven库
        // 先从阿里云maven下载jar若没有找到,则在后面的仓库中寻找
        //仓库优先级从上到下顺序排列
        maven {
            url "http://maven.aliyun.com/nexus/content/repositories/central"
        }
        jcenter()
        mavenCentral()

    }
    dependencies {
        ···
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        // maven库
        maven { url "http://maven.aliyun.com/nexus/content/repositories/central" }

        maven { url "https://jitpack.io" }

        jcenter()

        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

//关闭项目变更后的lint检查
tasks.whenTaskAdded { task ->
    if (task.name == "lint") {
        task.enabled = false
    }
}

可能一些朋友不明白为什么是项目的build.gradle。按照idea的构建来相对eclipse解释,一个项目就是一个对应的工作空间,每个工作空间下面的项目都是不同的module,也就是项目有build.gradle,module也有对应的build.gradle。

  1. 删除其他module中的repositories

我们既然已经设置了所有项目的repositories,那么其他module中repositories就没必要设置了

idea的gradle项目处理

  1. 在项目的build中加入如下设置
allprojects {
    repositories {
        // maven库
        // 先从阿里云maven下载jar若没有找到,则在后面的仓库中寻找
        //仓库优先级从上到下顺序排列
        maven { url "http://maven.aliyun.com/nexus/content/repositories/central" }

        maven { url "https://jitpack.io" }

        jcenter()

        mavenCentral()
    }
}

tasks.whenTaskAdded { task ->
    if (task.name == "lint") {
        task.enabled = false
    }
}

  1. 删除其他module中的repositories

我们既然已经设置了所有项目的repositories,那么其他module中repositories就没必要设置了。

修改idea项目生成代码模板,加入以上设置

···未完待续,且听下回分解。

上一篇 下一篇

猜你喜欢

热点阅读