Android支持Multidex仍然会生成“ main-dex文件中的超过64K方法”错误

时间:2019-06-21 17:03:47

标签: java android gradle androidx android-multidex

我是一位仍在支持minSdk 19的Android开发人员,并且遇到有关Maindex无法将请求的类放入main-dex文件中的问题。即使按照“启用multidex”开发人员页面上的建议步骤进行操作,错误仍然存​​在。我该怎么做才能在main-dex文件中支持更多方法,或者更好地在文件之间进行划分?

我已按照https://developer.android.com/studio/build/multidex页中建议的步骤进行操作。在Gradle文件中,我实现了'com.android.support:multidex:1.0.3'依赖性。我的应用程序来自MultiDexApplication。

主要问题可能是已经迁移到AndroidX,因此应用程序导入了androidx.multidex.MultiDexApplication库,而不是导入在依赖项中实现的支持库。

在build.gradle(Module:App)文件中(仅突出显示重要部分)

...
dexOptions {
   jumboMode true
}
...
defaultConfig {
    minSdkVersion 19
    targetSdkVersion 28
    ...    
    multiDexEnabled true
    multiDexKeepProguard file('multidex-config.txt')
}
...
dependencies {
    ...
    implementation "com.android.support:multidex:1.0.3"
    ...
}

在应用程序文件中:

import androidx.multidex.MultiDexApplication;
...
public class MainApplication extends MultiDexApplication...

通过尝试,可以预期这些方法将适合dex文件。但是,尝试构建APK时错误仍然存​​在:

Error: null, Cannot fit requested classes in the main-dex file (# methods: 66064 > 65536)

1 个答案:

答案 0 :(得分:0)

根据documentation,您必须在multidex-config中包含要保留的类。

分析您的APK,并检查主要dex文件中包含的类和方法,并检查有助于达到64K限制的软件包。

确保没有将整个项目保留在multidex-config文件中。

如果使用广泛的包过滤器,则文档中给出的示例可能会引起误解:

-保留类com.example。** {*; }

尝试仅保留必要的软件包:

-保留类com.example.YOUR-PACKAGE ** {*; }