xamarin - 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 文件的任何逻辑都超过了填充它
解决方案
假设您使用的是 Xamarin.Android 的最新版本之一,您可以尝试使用“新”Google D8 dex 工具与使用 Proguard。
<PropertyGroup>
<AndroidDexTool>d8</AndroidDexTool>
<AndroidLinkTool>r8</AndroidLinkTool>
</PropertyGroup>
有关各种 D8/R8 项目配置的详细信息,请参见此处的 Xamarin.Android 存储库:
推荐阅读
- reactjs - 尝试创建反应应用程序时出现“找不到命令:create-react-app”错误
- typescript - TypeScript:如何通过一系列链式函数传递缩小类型?
- docker - Docker 应用程序的远程 HTTP 端点
- flutter - Flutter 中 WebSocket 的 SSL/TLS 固定
- python - 拆分成数据框并为每个循环绘制?
- html - 如何在不破坏汉堡菜单的情况下将引导按钮放在右上角?
- r - 满足条件时从数据框列表中提取数据框名称和列名称 R
- amazon-web-services - 我正在使用 AWS Cognito 服务,我正在尝试在新用户注册时发送电子邮件
- javascript - 连接调用 GET 请求后,字符串未添加到 URL 字符串
- gradle - 如何正确定义 gradle 任务中的任务以在所有模块中运行?