• AndroidStudio提高编译速度的建议


    1、使用最新的Android gradle插件

    Google tools team一直致力于提高android studio的编译速度,使用最新的gradle插件可以搞编译速度 在Android Gradle Plugin 3.0后,google推出了新的依赖方式,并强制要求废弃老的依赖方式,将原有的compile闭包方法,拆分成implementation,api以明确项目的依赖关系。
    其中implementation仅对当前module依赖有效,api同compile,存在依赖的传递性。错误的使用则会导致依赖被加载两次,增加编译时间。
    更多3.0之后的特性可以参考官方文档中的 Dependency configurations 部分:
    https://developer.android.com/studio/build/dependencies

    - compile 'com.android.support:appcompat-v7:27.1.1'
    + implementation 'com.android.support:appcompat-v7:27.1.1'

    2、避免使用multidex

    当minSdkVersion为21以下的时候的时候(不包含21),则编译时间会大大增加。我们可以通过定制开发版本编译minSdkVersion为21来提高开发效率,具体配置如下:

    android {
        defaultConfig {        
            ...
            multiDexEnabled 
            true
        }
    
        productFlavors {
            dev {
                minSdkVersion 21        
            }
    
            prod {
                minSdkVersion your_minSDKVersion        
            }    
        }    
        ...
    }

    3、避免使用multi-APK(不常使用)

    当需要针对不同的ABI或dpi做支持,使用spilts{}对工程生成不同apk时可以使用该方法。
    在开发调试的时候,关闭splits功能,具体配置如下:

    android {    
        ...  
        if (project.hasProperty(‘devBuild’)){
              splits.abi.enable = false
              splits.density.enable =false   
        }   
        ...
    }

    使用命令行构建时使用这个命令:

    ./gradlew assembleDevelopmentDebug -PdevBuild

    当使用Android Studio构建可做以下配置:
    打开Preferences -> Build, Execution, Deployment -> Compiler,再Command-line选项后填写-PdevBuild,如下图所示:

    4、减少打包的资源文件

    在我们进行开发调试的时候,没有必要对所有的资源文件进行编译,通常只选择一种可以减少编译时间,具体配置如下:

    android{
        ...
        productFlavors {
              development {
                minSdkVersion 21
                //only package english translations, and xxhdpi resources   
                resConfigs (“zh”, “xxhdpi”)
              }
        }
        ...
    }
    

    5、禁用PNG压缩

    android构建的时候默认开启了PNG压缩,在开发调试时,可以将PNG压缩关闭,具体配置如下:

    android {
        ...
        if (project.hasProperty(‘devBuild’)){
            aaptOptions.cruncherEnabled = false
        }
        ...
    }
    

    6、使用Instant run

    andorid studio 3.0之后对instant run进行了很大的优化,之前的版本出现过更新的代码没有运行到手机上,所以一直关闭着。现在可以尝试使用。

    7、不在gradle中定义动态变量

    在开发调试的情况下,不要使用动态定义

    // def buildDateTime = new Date().format(‘yyMMddHHmm’).toInteger()
    def buildDateTime = project.hasProperty(‘devBuild’) ? 100 : new Date().format(‘yyMMddHHmm’).toInteger()
    android {
        defaultConfig {
            versionCode buildDateTime
        }
    }
    

    8、不要使用动态依赖版本

    项目在构建的过程中具有不确定性,可能因为网络问题导致编译时间过长或编译失败。并且Gradle会每24小时检查一次新的依赖版本从而增加依赖解析时间。
    不要使用下面的依赖方式:

    // 错误的示范
    implementation 'com.appadhoc:abtest:latest'
    implementation 'com.android.support:appcompat-v7:27+'
    

      

    9、对Gradle后台进程的最大堆大小的分配

    分配更大的内存可能会对大的项目的构建有时间上的减少,具体还要看电脑的配置等其他因素,具体可以参考gradle官网 Configuring JVM memory:
    https://docs.gradle.org/current/userguide/buildenvironment.html#sec:configuringjvm_memory
    新版本配置时在gradle.properties中配置

    org.gradle.jvmargs=-Xmx1536m
    

    不要在使用老版本的在build.gradle中配置

    dexOptions {
        javaMaxHeapSize = '4g'
    }
    

     

    10、使用Gradle缓存

    Gradle缓存是Gradle 3.5的新特性,当缓存开启时,Gradle将缓存并重用之前构建的结果。具体在gradle.properties中增加如下配置:

    org.gradle.caching=true
    

    以上几点出自google 2017 I/O大会,具体可参看会议视频 :
    https://www.youtube.com/watch?v=7ll-rkLCtyk

    11、针对项目构建时间具体进行优化

    针对每个项目的构建呢,具体的优化也不会相同,我们可以将我们项目的具体构建时间输出成文档,具体分析哪块的构建时间过长,来针对性的优化。具体命令如下:

    gradlew --profile --recompile-scripts --offline --rerun-tasks assembleFlavorDebug
    
    • --profile:启用分析。
    • --recompile-scripts:在绕过缓存时强制重新编译脚本。
    • --offline:禁止 Gradle 提取在线依赖项。这样可以确保 Gradle 在尝试更新依赖项时引起的任何延迟都不会干扰您的分析数据。您应当已将项目构建一次,以便确保 Gradle 已经下载和缓存您的依赖项。
    • --rerun-tasks:强制 Gradle 重新运行所有任务并忽略任何任务优化。 构建完成后,在project-root/build/reports/profile/ 目录下使用浏览器打开生成的profile-timestamp.html即可看到具体的构建时间报告。

    参考文档:

    andorid官方文档 —— 配置构建(https://developer.android.com/studio/build
    ◆ gradle官方文档 —— Building Android Apps (https://guides.gradle.org/building-android-apps
    ◆ Google I/O 中提到的提高Android studio的编译速度的几个建议 (https://blog.csdn.net/sd19871122/article/details/78550740

      

  • 相关阅读:
    你在寻找Vue3移动端项目框架嘛?请看这里
    vue init webpack xxx很慢?办它!
    TypeScript学习2TypeScript基础静态类型和对象类型
    百度地图自定义marker、文本标注
    TypeScript学习1开发环境搭建
    <三>computed 和事件的绑定
    <七>vue脚手架
    <八>vue脚手架项目结构
    <九>组件和路由
    <五>子父组件间的交互
  • 原文地址:https://www.cnblogs.com/steffen/p/9865905.html
Copyright © 2020-2023  润新知