multiDexKeepFile无效

8
我们在构建多dex应用时遇到问题。在应用启动期间,我们不断收到不同的java.lang.NoClassDefFoundError错误。我们注意到这些错误很可能与多dex问题有关。由于引导应用程序所需的类必须存在于主DEX文件中,而它们未被包括在classes.dex中。我们执行了https://developer.android.com/studio/build/multidex.html#keep中描述的步骤,但是我们在multidex-config.txt或者multidex-config.pro中指定的类并没有被放置在主dex文件(classes.dex)中。
你们有使用multiDexKeepFile或multiDexKeepProguard的经验吗?它真的有效吗?有什么诀窍可以使其正常工作并将文件放置在classes.dex中吗?

2
嗨,Nadilson,你搞定了吗? - Thomas Wanschik
和Thomas Wanschik一样的问题 - Benobab
你找到解决方案了吗? - user5186466
没有。我找到了一些信息指出这是构建工具中已知的错误。 - Nadilson Ferreira
1
@NadilsonFerreira 两年后,我仍然遇到了这个bug。你是如何处理它的? - ban-geoengineering
3个回答

3
尝试更新gradle插件。我发现在2.2.0中完全忽略了配置。 当我升级到2.3.3时,它开始遵守我设置的规则。
示例:
classpath com.android.tools.build:gradle:2.3.3

在我的默认配置中,我已经将其设置为:

    multiDexEnabled true
    multiDexKeepProguard file('proguard.multidex.config')

在更改生效之前,您可能需要进行一次清除构建。


3
我正在使用(当前的)最新Gradle插件版本- classpath 'com.android.tools.build:gradle:3.5.3',但仍然遇到了OP的问题。此外,通过检查我的apk(https://developer.android.com/studio/build/apk-analyzer),我发现我通过`multiDexKeepFeel`指定的类存在于**classes2.dex**而不是*主要* dex 文件classes.dex中。 - ban-geoengineering

1

1

我有同样的问题,但我仍然不知道原因。但我找到了另一个解决方案,并且它有效。在您的应用模块的build.gradle中添加dexOptions:

android {
    dexOptions {
        additionalParameters = ['--multi-dex',
                                '--set-max-idx-number=60000',
                                '--main-dex-list='+projectDir+'/your_multidexconfig.txt',
                                '--minimal-main-dex'
        ]
    }
}

请注意,这些参数适用于dx,而不是d8。其中只有 --main-dex-list 可用于 d8。 - Matt Robertson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接