gradle - Android Studio构建太慢的multidex应用程序

时间:2015-05-11 20:56:20

标签: android gradle android-multidex

当我向我的项目添加multidex:true,并创建一个从MultiDexApplication扩展的Application类时,我的项目构建时间从20秒传递到大约90秒。如何更快地做一些?

4 个答案:

答案 0 :(得分:26)

如果你像我一样已经尝试过Vic Vu的解决方案,但仍然无法启用multiDex,那么你可以试试这个(只要你使用的是Android 5.0及更高版本的设备)。

注意这只会加快您的开发构建速度。您的生产构建仍然会很慢。

基本上,您需要为dev引入一种产品口味,为prod引入一种口味。

添加multiDexEnabled true

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'
        }
        defaultConfig {
            applicationId "com.something.something"
            targetSdkVersion 23
            versionCode 1
            versionName "1.0.0"

            multiDexEnabled true
        }
    }
dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

我有一个扩展Application的课程,因此我必须覆盖attachBaseContext()

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

如果您不延长Application,只需在MultiDexApplication AndroidManifest.xml标记中使用application

确保在您的Android Studio Build Variants中指向devDebug

请阅读https://developer.android.com/studio/build/multidex.html#dev-build

中的完整说明

答案 1 :(得分:25)

作为答案提供,因为这更适合格式化。

简单回答你的问题:不,没有办法。 Multidex是一个旨在帮助解除65k方法限制负担的过程。这个过程很复杂,只会让你的构建时间更长。

你能做的最好的事情就是降低你的方法数量。

在你正在使用的build.gradle(supplied here)中:

`compile 'com.google.android.gms:play-services:8.3.0'`

但是如果你看一下最新的游戏服务api,你可以选择你真正需要的服务。

请看表1 on this page

仅使用您需要的。 Google Play服务整体上大约有30k种方法。

那应该有所帮助。

答案 2 :(得分:2)

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

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

dexOptions {
    javaMaxHeapSize "4g"
}

答案 3 :(得分:1)

取决于。

您尚未在问题中指定它,但如果您只是想加快开发版本 - 那么您可以避免额外的工作。官方文档包括whole section