【问题标题】:Android Gradle Multidex - Can't minimize classes.dex, ALWAYS contains max referencesAndroid Gradle Multidex - 无法最小化 classes.dex,总是包含最大引用
【发布时间】:2018-02-15 18:44:33
【问题描述】:

我有一个已经成功使用多索引的应用程序,但现在我有一个框架需要将自己包裹在主 classes.dex 周围,这意味着它需要在包裹后低于最大引用限制。

但无论我提供什么 Gradle dexOptions,主要的 classes.dex 总是包含最多 65535 个引用:

我已经/尝试过的 Gradle 设置:

dexOptions { // params tried separately and together
   additionalParameters '--minimal-main-dex --set-max-idx-number=55000'
}

defaultConfig {
   multiDexEnabled true
   // Shouldn't be necessary for source code within module
   multiDexKeepFile file('multidex-config.txt')
}

multidex-config.txt 保留文件仅包含我的非常小的应用程序类:com/package/name/MyApplication.class

其他信息:

  • minSdkVersion 21
  • targetSdkVersion 26
  • dex 文件总数:

我错过了什么吗?

编辑:好的,所以我刚刚发现由于某种原因它有时适用于我的 'qa' buildType,但不适用于我的 'debug' buildType,并且也仅适用于 'qa ' 在我的本地机器上,而不是在其他机器上,包括我们的构建服务器。我在每次构建之前运行一个 gradle clean,所以它不能缓存这是问题所在。

buildTypes {
    debug { // DOESN'T WORK
        testCoverageEnabled false
        zipAlignEnabled false
        applicationIdSuffix ".debug"
    }

    qa { // DOES WORK, sometimes, on my local machine only
        initWith(debug)
        applicationIdSuffix ".qa"
        zipAlignEnabled false
        testCoverageEnabled false
    }
    release { // ALWAYS WORKS - Probably due to minification by Proguard
        zipAlignEnabled false // To be signed later
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

仍然不知道为什么会这样。

【问题讨论】:

  • 你解决了这个问题吗?
  • 不,我们从来没有这样做过。我们需要它来使用分析框架 Dynatrace,并且我们发现最新版本的框架实际上可以在 dex 文件太大时为我们调整大小和移动它的内容。我不知道可以像这样操作 dex 文件,但如果有其他专门用于执行此操作的工具,我不会感到惊讶。
  • 我也找不到解决方案。但是,我尝试了新的 R8 而不是 Proguard(我在我的项目中使用了 Proguard),它优化了代码,以至于我的项目低于 DEX 文件限制。 (对于我的项目:Proguard:93505 种方法,R8:61182 种方法)。使用 R8,如果您也低于限制,您可能不再需要限制 dex 大小。

标签: android gradle android-gradle-plugin android-multidex


【解决方案1】:

在您的 gradle 文件中添加以下依赖项。

dependencies {
        ...
        implementation 'com.android.support:multidex:1.0.2'
}

并使用以下代码更新 dexOptions

dexOptions {
        javaMaxHeapSize "4g"
    }

【讨论】:

  • 不幸的是,这些是无关的。 javaMaxHeapSize 不影响输出文件,添加 multidex 作为依赖只用于 minSdk
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2020-11-04
相关资源
最近更新 更多