【发布时间】:2018-02-12 11:20:11
【问题描述】:
这似乎是最近才出现的问题,老实说,我不确定哪个问题是真正的问题。上周,在更新 VS2017 和 Android 支持库后,我开始收到错误“java.exe has exited with code 2”。经过搜索,似乎共识是启用 MultiDex。所以我这样做了,它在较新的手机上运行良好。但是当我尝试在 KitKat 手机上编译时,我开始出现丢失类异常(但仅当我使用 Android Monitor 登录时,VS 中没有异常)。
我关注this link 关于自定义应用程序类。我正在使用正确的 bat 文件和正确的自定义类。在 21+ 上一切看起来都还不错,但旧设备仍然报告 mono.MonoPackageManager 丢失。
当我查看调试文件夹中生成的multidex.keep 时,mono/MonoPackageManager.class 肯定在该文件中。所以我真的不知道。
我生成了一个 APK 以便使用 classyshark 对其进行检查。我在那里发现了一些有趣的东西。我的方法总数在 30K 左右,那么如果限制为 65K,为什么还要使用 multidex?而且,我注意到mono/MonoPackageManager 在classes2.dex 中,尽管它在我的multidex.keep 文件中。
我是否遗漏了一些明显的东西,或者最近 Xamarin.Android 中是否存在一些重大错误?
编辑:取得了进展?忽略我的项目甚至不需要 multidex 的事实,我注意到生成的 multidex.keep 文件只是一行,没有空格或任何东西。当我修改此文件以将每个类放在新行上,然后使用构建操作 MainDexMainDexList 添加该文件时,一切正常。我不需要重新添加它之前抱怨的类。我尝试了多个版本的 android 构建工具(特别是 25.0.2 和 26.0.1),结果相同。我觉得很奇怪,添加新行修复了问题,但是生成的文件没有新行。
【问题讨论】:
-
请参阅bugzilla.xamarin.com/show_bug.cgi?id=59036 了解换行符的回归。请参阅bugzilla.xamarin.com/show_bug.cgi?id=55117 了解为什么 30k 不接近 65k 限制。 (Xamarin 中默认不使用 Proguard)
标签: android xamarin.android mono android-multidex