kotlin 编译时间优化

一。优化具体步骤
1.在gradle.properties添加如下配置

//开启gradle并行编译,开启daemon,调整jvm内存大小
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

//开启gradle缓存
org.gradle.caching=true
android.enableBuildCache=true

//开启kotlin的增量和并行编译
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kotlin.parallel.tasks.in.project=true //开启kotlin并行编译


//优化kapt
kapt.use.worker.api=true //并行运行kapt1.2.60版本以上支持
kapt.incremental.apt=true //增量编译 kapt1.3.30版本以上支持
//kapt avoiding 如果用kapt依赖的内容没有变化,会完全重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间
kapt.include.compile.classpath=false

二、在app gradle添加如下配置

//kapt添加如下配置
kapt {
    useBuildCache = true
    javacOptions {
        option("-Xmaxerrs", 500)
    }
}

//在Android代码块中添加如下配置:(可优化transformClassDexBuilderForDebug的时间)
    dexOptions {
        preDexLibraries true
        maxProcessCount 8
    }

三、以上就是优化gradle编译时间的配置.其他不太重要的优化,好像对时间影响不算特别大。大家也可以根据自己的项目做针对优化。
查看自己项目中gradle编译中具体所用的时间
1.创建buildTrace.gradle文件

import java.text.SimpleDateFormat

/**
 * 监控构建耗时
 *
 * 记录构建过程中的每个任务的耗时,并写入文件中 .build_history/buildTimeLog_yy_MM_dd_HH_mm_ss.log中
 *
 * 使用时将文件放在app目录下,然后在app/build.gradle中添加引用:
 * apply from: "./buildTrace.gradle"
 */

class BuildTimeListener implements TaskExecutionListener, BuildListener {
    private final String BUILD_LOG_FILE_DIR = ".build_history"
    private final String BUILD_LOG_FILE_PATH = "buildTimeLog"
    private long taskStartTime;
    private long buildStartTime;
    private int taskCounts = 0;
    private StringBuilder sb = new StringBuilder()
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss")

    BuildTimeListener() {
        buildStartTime = System.currentTimeMillis()
        //添加一些版本信息
//        sb.append("codeTag:").append(ProjectConfig.codeTag).append("\n")
//        sb.append("branch:").append(ProjectConfig.branch).append("\n")
//        sb.append("versionName:").append(ProjectConfig.versionName).append("\n")
//        sb.append("versionCode:").append(ProjectConfig.versionCode).append("\n")
        sb.append("构建时间:" + sdf.format(new Date()) + "\n")
        sb.append("开始构建----------------------\n")
    }

    @Override
    void buildStarted(Gradle gradle) {

    }

    @Override
    void settingsEvaluated(Settings settings) {

    }

    @Override
    void projectsLoaded(Gradle gradle) {

    }

    @Override
    void projectsEvaluated(Gradle gradle) {

    }

    /**
     * 构建完成回调
     * @param result The result of the build. Never null.
     */
    @Override
    void buildFinished(BuildResult result) {
        if(taskCounts<5) return
        long buildCost = System.currentTimeMillis() - buildStartTime
        sb.append("构建结束----------------------\n")
        sb.append("构建总耗时:" + buildCost + "ms")
        //输出到文件
        String text = sb.toString()
        writeToFile(BUILD_LOG_FILE_PATH, text)
    }

    /**
     * 任务执行开始
     * @param task The task about to be executed. Never null.
     */
    @Override
    void beforeExecute(Task task) {
        taskStartTime = System.currentTimeMillis();
    }

    /**
     * 任务执行结束
     * @param task The task which was executed. Never null.
     * @param state The task state. If the task failed with an exception, the exception is available in this
     */
    @Override
    void afterExecute(Task task, TaskState state) {
        long cost = System.currentTimeMillis() - taskStartTime;
        System.out.println("任务:" + task.name + "," + task.path + ",耗时:" + cost);
        sb.append("[" + task.path + "]:" + cost + "ms\n")
        taskCounts++
    }

    private void writeToFile(String fname, String text) {
        File dir = new File(BUILD_LOG_FILE_DIR)
        if (!dir.exists()) {
            dir.mkdir()
        }
        File file = new File(BUILD_LOG_FILE_DIR + File.separator + fname + "_" + sdf2.format(new Date()) + ".log")
        file.write(text, true)
    }
}

gradle.addListener new BuildTimeListener()

2.在app项目中引用

apply from: 'buildTrace.gradle'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值