美文网首页
加速gradle构建

加速gradle构建

作者: 禅与发现的乐趣 | 来源:发表于2018-05-23 15:46 被阅读17次

    开启Daemon

    Gradle Daemon是一个长期生存(3小时不被调用就会自动结束)能够提升编译速度的后台进程。它的优化原理如下:

    • 由于gradle是运行在JVM之上的,并且有较多的依赖库,长期运行在后台能够节省每次编译需要重新初始化的时间。
    • 通过运行时代码优化来提升编译性能,这种优化是循序渐进的,随着编译次数的增多,优化效果会越来越好,一般在5-10次编译后,优化效果趋于稳定。
    • Gradle Daemon通过编译缓存提高效率。如gradle能缓存一些编译时的输入和输出,支持增量编译。
      在gradle配置文件中配置如下:
    # 为了保证每次编译的独立性,在持续集成中,不建议开启daemon
    org.gradle.daemon=true
    

    Configuration on demand

    gradle编译的三个阶段:

    • 初始化,gradle支持单个或多个项目同时编译,在初始化阶段,gradle决定哪些项目参与编译,并为每一个项目创建一个project实例。
    • 配置阶段,对所有项目进行配置,会执行项目里面的build.gradle文件,下载相关的插件和依赖等,决定需要执行那些任务的集合。
    • 执行阶段,执行在配置阶段确定的所有task。
      按需配置(configuration on demand)只对任务相关的项目进行配置,在大型多项目编译过程中非常有用,能够大幅度减少不必要的配置时间。
    org.gradle.configureondemand=true
    

    设置内存大小

    根据自身设备进行配置:

    org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    

    为gradle分配最大5G内存。

    debug构建关闭proguard

    proguard除了代码混淆外,还可以进行代码压缩,优化和验证,代码优化会占用很多的时间,比如一个开启了代码优化的配置如下:

    -optimizationpasses 5
    

    这就意味着代码优化会经过5次,即上一次的优化输出结果作为下一次优化的输出。
    可以在gradle配置debug编译方式时禁用proguard。

    buildTypes {
            release {
                buildConfigField("boolean", "DEBUGABLE", "false")
                buildConfigField("int", "SERVER_TYPE", "${rootProject.ext.serverEnvCode}")
                minifyEnabled true
                zipAlignEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release
            }
            debug {
                buildConfigField("boolean", "DEBUGABLE", "true")
                buildConfigField("int", "SERVER_TYPE", "${rootProject.ext.serverEnvCode}")
                versionNameSuffix "-debug"
                minifyEnabled false
                zipAlignEnabled true
                shrinkResources false
    //            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release
            }
        }
    

    直接点选运行按钮可以选择编译方式,具体参考-----

    模块化项目和并行编译

    并行执行在多项目编译的项目中能有效提升编译的速度,但是并行的前提是每个项目已经被模块化,每个项目之间没有耦合,这个功能目前还在孵化中。。。
    开启parallel

    # When configured, Gradle will run in incubating parallel mode.
    # This option should only be used with decoupled projects. More details, visit
    # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
    org.gradle.parallel=true
    
    

    开启offline

    开启offline后,可以强制gradle使用本地缓存的依赖,避免了网络读写操作和网络检查依赖。
    如果某个依赖不存在的时候,编译会出错,这样只需要暂时关闭offline,等依赖下载下来后,再打开就可以了。


    gradle-1.png

    相关文章

      网友评论

          本文标题:加速gradle构建

          本文链接:https://www.haomeiwen.com/subject/bkirjftx.html