首页 > 解决方案 > MultiDex:启用 MultiDex 时超出主 Dex 容量

问题描述

我正在使用一个包含在需要 MultiDex 的项目中的包,我有 156561 个引用,所以我需要多个 .dex 文件。

但是它失败了,理由是主 dex 文件太大

有些人建议使用 keepRuntimeAnnotatedClasses false,但我使用的是 Xamarin,并且不清楚如何在没有 Gradle 的情况下完成此操作。

其他人建议设置最小 API > 21,这对我的项目来说已经是正确的。

我还手动升级了 Proguard,因为 MultiDex 使用它并获得了最新的 1.8 JDK

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:548)
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:368)
at com.android.dx.command.dexer.Main.runDx(Main.java:289)
at com.android.dx.command.dexer.Main.main(Main.java:247)
at com.android.dx.command.Main.main(Main.java:94)

我认为 MultiDex 将成为“太多类”的解决方案。然而,似乎决定填充主 dex 文件的任何逻辑都超过了填充它

标签: xamarinxamarin.formsxamarin.androidandroid-multidex

解决方案


假设您使用的是 Xamarin.Android 的最新版本之一,您可以尝试使用“新”Google D8 dex 工具与使用 Proguard。

<PropertyGroup>
   <AndroidDexTool>d8</AndroidDexTool>
   <AndroidLinkTool>r8</AndroidLinkTool>
</PropertyGroup>

有关各种 D8/R8 项目配置的详细信息,请参见此处的 Xamarin.Android 存储库:


推荐阅读