加速multidex应用程序中的gradle构建

时间:2015-06-11 09:22:23

标签: android performance android-studio android-gradle android-multidex

我的应用程序有一堆必不可少的库,这就是为什么我被迫使用multidex支持库并且它运行良好。但问题显示的是在gradle buid速度。平均需要2分钟才能构建,当我开发和测试时,这非常烦人。

有没有办法加快我的调试版本?

7 个答案:

答案 0 :(得分:61)

您可以通过指定最低SDK版本= 21来加速开发版本 官方文档包括whole section

示例(来自文档):

android {
    productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
            // to pre-dex each module and produce an APK that can be tested on
            // Android Lollipop without time consuming dex merging processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 14
        }
    }
          ...
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                                                 'proguard-rules.pro'
        }
    }
}
dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

添加产品风格后,您可以使用devDebug任务(而不是默认的debug任务)进行开发构建:
- 从命令行:运行./gradlew installDevDebug
- 从Android Studio:open Build Variants window并选择devDebug构建变体。

当然,您应该使用SDK> = 21.

的设备

对于那些不想使用口味的人来说,这也是一个解决方案。根据{{​​3}}中的建议,动态计算minSdkVersion值:

int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14
apply plugin: 'com.android.application'

android {
    ...
    defaultConfig {
        minSdkVersion minSdk
        ...
    }
}

在此示例中,我们会检查是否定义了devMinSdk属性,如果属性为true,我们就会使用它。否则,我们默认为14.

我们如何将devMinSdk值传递给构建脚本?两个选项:

使用命令行:

./gradlew installDebug -PdevMinSdk=21

使用Android Studio偏好设置:

转到偏好设置(Windows上的设置) - > 构建,执行,部署 - > 编译器 - >将-PdevMinSdk=21放入命令行选项文本框中。

this gist

答案 1 :(得分:3)

最近的构建缓存是由使用Android Gradle插件的团队引入的。您可以通过将android.enableBuildCache=true添加到gradle.properties来启用它。

此处有更多信息 http://tools.android.com/tech-docs/build-cache

对我而言,增加的构建时间增加了约30秒。

它不适用于作为支持库一部分引入的旧版multidex(com.android.support:multidex),因此仅当您的minSDK> = 21时才适用。您只能为您的开发版本设置它并执行发布使用minSDK构建< 21。

它也可以在没有启用多索引的情况下工作。

答案 2 :(得分:1)

Android Studio 1.3 (目前in Preview 3)正在使用新的构建系统,该系统改善了gradle构建时间(实际上,速度提高了10-30倍)。

Live Session at Google I/O 2015

中的更多信息

答案 3 :(得分:1)

Multidexing使用更多内存。随着你越来越接近Java中的最大堆大小,你会发现Java花费更多时间做GC而不是做任何实际工作,这可能会减慢很多事情。

我强烈建议在使用multidex时增加最大堆大小。将以下内容添加到build.gradle文件中的android闭包中,使最大堆大小为4GB(如果您愿意,请将其缩小):

dexOptions {
    javaMaxHeapSize "4g"
}

答案 4 :(得分:0)

将MinSdk更改为21使我的一切恢复正常。现在一切都像6s一样编译

答案 5 :(得分:0)

最新的Android Studio 3.0不再需要此功能

答案 6 :(得分:-1)

进入设置,搜索编译器,在命令行选项中键入“--offline”而不是编译。