加速 gradle 编译之屏蔽部分 Task | 掘金技术征文

灵感来源

首先祝你们圣诞快乐! :smile: :+1:javascript

该篇博客灵感来自以前的一片博客:java

Android Studio clean 时产生 Error:Execution failed for task ':app:mockableAndroidJar' > java.lang.NullPointerException (no error message)linux

和一个神库的issue:android

android-hidden-api#21git

首先简单介绍下这个神库——android-hidden-api: 可让你使用安卓系统中 internal/hidden 的方法。

好比, Activity 里有一个@hide的方法:github

/** * @hide */
public final boolean isResumed() {
    return mResumed;
}复制代码

没用该库以前引用这个方法会报找不到该方法:api

isResumed

可是使用该库后, 编译正常:app

isResumed internal

编译经过了, 实际运行怎么样呢, 该方法可运行正常, 可是不保证全部系统, 同时也不能保证全部内部方法可运行。裤子不错, 不要贪用哦, 要多测试, 并加入异常处理。jvm

详细使用可参考鸿神以前的文章:编辑器

Android 轻松的查看与使用hide与internal API

加速gradle编译

1 经常使用的加速方法, 你们可能都配置好了, 主要下面几个:

  • 开启gradle单独的守护进程
    在gradle.properties文件中输入以下代码:
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true复制代码

固然,上面的这些参数也能够配置到前面的用户目录下的gradle.properties文件里,那样就不是针对一个项目生效,而是针对全部项目生效。
gradle.properties配置文件主要就是增大gradle运行的java虚拟机的大小,让gradle在编译的时候使用独立进程,让gradle能够平行的运行。

  • 申请大内存

as安装目录/bin/studio64.vmoptions or studio.vmoptions(linux下,其余系统找相似文件)
使用文本编辑器打开,找到起始两行,以下
-Xms128m
-Xmx750m

修改最小值和最大值,建议为
-Xms256m
-Xmx2048m

  • incremental dex
    改变incremental dexing的值,这是一个实验的功能而且默认是关闭的。打开这个开关有可能会致使构建失败,错误信息相似jdk finished with non-zero exit value 2
    (尤为是在连续运行的时候),但我仍是推荐你尝试一下,看看它是否对你有用。

在主APP模块的build.gradle文件中,添加下面的代码:

dexOptions {
    incremental true
}复制代码

2 屏蔽部分Task

咱们知道, 编译的时候, 是有不少Task运行的, 可在右侧 gradle 标签下看到:

gradle tasks

当咱们正常编译的时候, 这些Task都是会运行的, 咱们看下编译log:

gradle uptodate

不少Task后面都有 UP-TO-DATE也就是Task已经是最新, 这些基本不耗时, 其余都耗时, 项目大, 同时依赖多个库, 那么慢是正常的了...

下面, 哦,,, 没错, 就是下面,

屏蔽不须要的Task, 好比一些测试Task, 中间含有Test的一些Task, 把这些屏蔽掉:

在项目的根build.gradle脚本里添加屏蔽Task的代码:

allprojects {
    repositories {
        jcenter()
    }

    //skip Test tasks
    gradle.taskGraph.whenReady {
        tasks.each { task ->
            if (task.name.contains("Test"))
            {
                task.enabled = false
            }
        }
    }

}复制代码

这样sync, 编译, 见证奇迹的时刻:

task skipped

Oh, 圣诞快乐 :smile: 没错, 好多Task后面被标记了SKIPPED, 那这些Task都被无情的忽视了, 酸爽。

固然还能够屏蔽掉其余Task, 欢迎讨论。编译时间的提高效果仍是很明显的, 项目越大越明显。

到这里就差很少了, 固然, 网上还有不少加速编译的方法, 最好用的仍是阿里的

秒级编译工具freeline

这个还没使用的, 赶忙用起来, 赶忙用起来, 赶忙用起来, 不解释。

到这里该说再见了, 有任何问题欢迎评论, 感谢您的阅读, 圣诞快乐!

掘金技术征文:
gold.xitu.io/post/58522d…

相关文章
相关标签/搜索