22

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

有没有办法加快我的调试构建?

4

7 回答 7

60

您可以通过指定最低 SDK 版本 = 21 来加速您的开发
构建。 官方文档包括关于此的完整部分

示例(来自文档):

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:打开 Build Variants 窗口并选择devDebug构建变体。

当然,您应该使用 SDK >= 21 的设备。


对于那些不想使用口味的人来说,还有一个解决方案。如this gist中所建议,动态计算该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命令行选项文本框。

Android Studio 编译器选项

于 2015-06-12T09:17:00.910 回答
3

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

更多信息在这里 http://tools.android.com/tech-docs/build-cache

对我来说,它增加了大约 30 秒的增量构建时间。

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

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

于 2016-10-12T10:40:22.707 回答
1

Android Studio 1.3(目前在 Preview 3 中)正在使用一个新的构建系统,它改进了 gradle 构建时间(真的,快了 10-30 倍)。

更多信息请参阅Google I/O 2015 现场会议

于 2015-06-11T09:32:57.923 回答
1

多索引使用更多内存。当您接近 Java 中的最大堆大小时,您会发现 Java 在 GC 上花费的时间比在实际工作上花费的时间要多,这会大大减慢速度。

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

dexOptions {
    javaMaxHeapSize "4g"
}
于 2015-09-30T09:56:12.133 回答
0

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

于 2016-03-31T02:06:29.663 回答
0

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

于 2017-11-08T21:49:39.937 回答
-1

进入设置,搜索编译器,在命令行选项中输入“--offline”,然后编译。

于 2015-06-11T09:29:12.180 回答