美文网首页Android studio关于Android
Android Studio 优化构建速度解决方案

Android Studio 优化构建速度解决方案

作者: yangjingxuan | 来源:发表于2017-03-07 11:00 被阅读1129次

    原文连接 Android Studio 优化构建速度解决方案

    随着项目工程的扩大,程序编译时间也越来越长,同时也影响到了我们整个开发的速度。为了提高开发效率下面将列出一些优化方案:

    开发的时候尽可能的使用最新设备进行开发,运行在Android7.0(API level 24)

    最新的Android 平台可以让你程序编译运行速度更快,如Android Runtime(ART)还有更好对multiple DEX 支持

    1.优化配置文件
    • 确保你的buildToolsVersion,Gradle最新

      Android 编译工具随着版本的更新升级会不断的进行优化,使用最新的版本来开发

      Android Studio and SDK tools

      Gradle 更新

    • 给你的开发环境配置特定的参数

      大多数的配置都是在你开发正式环境版本所需要,而日常编译的时候并不用到这类配置,开启了不必要的配置会减慢你的编译速度

      因此需要你配置一个特定的开发环境变量,如下面代码里"dev"(开发环境),"prod"(正式环境)

      android {
        ...
        defaultConfig {...}
        buildTypes {...}
        productFlavors {
        // 可以参考如下配置
          dev {
          // 为了避免64k方法数限制,将开发环境的最低minSdkVersion 设置到 21以上 或更高
            minSdkVersion 21
            versionNameSuffix "-dev"
            applicationIdSuffix '.dev'
          }
      
          prod {
          // 如果编译正式环境版本使用默认配置,那么你可以置空这块代码
          // 但是你仍然需要创建这个变量,否则全部环境 会使用开发变量的配置
          }
        }
      }
      

      如果你已经配置了上述的环境变量,当你在开发的时候需要混合加入一些新的变量,那么你可以通过flavorDimensions 配置维度 如:在新的环境变量"demo", "full" 进行添加维度

      android {
        ...
        defaultConfig {...}
        buildTypes {...}
      
        // 定义下面你需要用到变量维度
        // 当你使用Gradle进行合并的时候,指定你需要的环境维度
        
        flavorDimensions "stage", "mode"
      
        productFlavors {
          dev {
            dimension "stage"
            minSdkVersion 21
            versionNameSuffix "-dev"
            applicationIdSuffix '.dev'
            ...
          }
      
          prod {
            dimension "stage"
            ...
          }
      
          demo {
            dimension "mode"
            ...
          }
      
          full {
            dimension "mode"
            ...
          }
        }
      }
      
    2.避免编译不必要的资源

    在开发环境编译的时候,你可以选定一种语言与一个屏幕分辨率参数,如下面

    android {
      ...
      productFlavors {
        dev {
          ...
          resConfigs "en", "xxhdpi"
        }
        ...
      }
    }
    
    3.开发版本编译关闭奔溃分析日志

    如果你不需要奔溃分析日志报告,你可以直接关闭

    android {
      ...
      buildTypes {
        debug {
          ext.enableCrashlytics = false
        }
    }
    
    4.使用静态配置值在你调试编译时

    当你在编译生成正式版本的时候会用到动态版本代码,版本名称,资源等,这些动态生成的配置参数可以在调试运行时候隔离他们,使用静态的配置值进行debug 版本编译,如下面的代码:

    int MILLIS_IN_MINUTE = 1000 * 60
    int minutesSinceEpoch = System.currentTimeMillis() / MILLIS_IN_MINUTE
    
    android {
        ...
        defaultConfig {
            // 默认使用版本静态值
            versionCode 1
            versionName "1.0"
            ...
        }
    
    
        // 这些动态值将在你编译正式版本时候生效
        applicationVariants.all { variant ->
            if (variant.buildType.name == "release") {
                variant.mergedFlavor.versionCode = minutesSinceEpoch;
                variant.mergedFlavor.versionName = minutesSinceEpoch + "-" + variant.flavorName;
            }
        }
    }
    
    
    5.使用静态依赖版本值

    诸如com.android.tools.build:gradle:2.+可以在编译调试的时候使用当前固定版本值替换

    6.配置DexOptions与启用 Library per-dexing
    • Library per-dexing

      使用预生成库进行增量更新

    • maxProcessCount

      设置最大的线程数

    • javaMaxHeapSize

      设置最大堆空间

      android {
        ...
        dexOptions {
          preDexLibraries true
          maxProcessCount 8
          javaMaxHeapSize "2048m"
        }
      }
      
    7.增大Gradle编译堆栈空间

    如在你的 gradle.properties 文件下 增大设置堆栈空间

    org.gradle.jvmargs = -Xmx2048m
    
    8.使用WebP 图片格式

    将PNG图片转换成WebP

    9.禁用PNG图片处理

    如果你不想转换webp格式的图片,但是你仍旧想提高你的编译运行速度,那你可以参照如下配置 禁用PNG图片自动压缩

    android {
      ...
      aaptOptions {
        cruncherEnabled false
      }
    }
    

    提示:当你以一次构建成功后,你会发现接下来的clean build操作会越来越快(即使不使用本页的任何优化)。这个是因为Gradle 进程会有一个“热身”提高性能的过程,类似JVM进程的预热期

    通过本页的一些优化后,应该能为你减少编译过程的大多数时间

    相关文章

      网友评论

        本文标题:Android Studio 优化构建速度解决方案

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