【问题标题】:gradle - Android Studio build too slow multidex applicationgradle - Android Studio 构建速度太慢的 multidex 应用程序
【发布时间】:2015-05-11 20:56:20
【问题描述】:

当我将 multidex:true 添加到我的项目中,并创建一个从 MultiDexApplication 扩展的应用程序类时,我的项目构建时间从 20 秒变为大约 90 秒。如何更快地做一些?

【问题讨论】:

  • AFAIK,没有办法让它更快。唯一的解决方案是减少应用程序中的方法数量并摆脱MultiDex。甚至官方文档也说 这意味着使用 multidex 作为开发过程的一部分执行的常规构建通常需要更长的时间,并且可能会减慢您的开发过程。
  • 您确定所有导入的库对于您的应用程序来说都是必需的吗?如果没有,您可以删除某些内容并避免使用 multidex
  • 我需要这样做,当将所有库添加到谷歌日历 api 的依赖项时。在这些主题中,我描述了它的问题:stackoverflow.com/questions/30104925/…。也许你现在如何围绕multidex?我认为这可以避免,但我现在没有其他方法。谢谢)

标签: android gradle android-multidex


【解决方案1】:

如果你像我一样已经尝试过 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,只需在您的 AndroidManifest.xml application 标签中使用 MultiDexApplication

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

在此处阅读完整的说明https://developer.android.com/studio/build/multidex.html#dev-build

【讨论】:

  • 你把你的类扩展应用程序放在哪里?因为我不知道放在哪里
  • 最好在根包中创建一个类(例如com.something.something.MyApplication)。让MyApplication 类扩展Application(例如public class MyApplication extends Application { ... }。在application 标记的AndroidManifest 中声明此类。(例如<application android:name=".MyApplication" ... > .....
  • 我看不到,对不起,你能发布任何教程吗?现在我在没有从 Aplication 扩展的类的情况下运行(并且似乎有效),我不知道是否放入根目录 - /java/here 或 java/package/here。最好是任何指南谢谢。
  • @delive 快速Google 提出了很多关于此的文章。我随机挑了一个:intertech.com/Blog/androids-application-class
【解决方案2】:

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

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

您能做的最好的事情就是减少方法数。

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

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

但如果您查看最新的播放服务 api,您可以选择您实际需要的服务。

查看表 1 on this page

只使用你需要的那些。 Google play 服务作为一个整体大约有 30k 种方法。

这应该会有所帮助。

【讨论】:

  • 谢谢,你让我免于无聊而死。仅添加钱包,登录服务保持在 30 k 方法以下。
  • 正如 Mark Pazon 在另一个答案中提到的,该解决方案在“优化 Multidex 开发构建”下的 developer.android.com/tools/building/multidex.html 下进行了解释
【解决方案3】:

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

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

dexOptions {
    javaMaxHeapSize "4g"
}

【讨论】:

    【解决方案4】:

    视情况而定。

    您没有在问题中指定它,但如果您只是想加快您的 开发 构建 - 那么您可以避免额外的工作。官方文档中包含一个 whole section

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2016-05-05
      • 2023-03-05
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      相关资源
      最近更新 更多