【发布时间】: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 21targetSdkVersion 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