带有 multidex 的 Xamarin Android - 调试模式下的错误

Posted

技术标签:

【中文标题】带有 multidex 的 Xamarin Android - 调试模式下的错误【英文标题】:Xamarin Android with multidex - bug in debug mode 【发布时间】:2017-11-12 21:15:28 【问题描述】:

我创建了 Xamarin Forms 应用程序。我为 android 使用 multidex(许多库)。 我使用带有 MultiDexMainDexList 选项的 multidex.keep 文件。现在部署工作。但我在调试模式下遇到异常:

 System.ArgumentException: The offset and length have exceeded the bounds of the array or the counter value exceeds the number of elements from the pointer to the end of the original collection.
 в System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count)
 в Mono.Cecil.Metadata.GuidHeap.Read(UInt32 index)
 в Mono.Cecil.MetadataReader.InitializeCustomDebugInformations()
 в Mono.Cecil.MetadataReader.GetCustomDebugInformation(ICustomDebugInformationProvider provider)
в Mono.Cecil.Cil.PortablePdbReader.Read(MethodDefinition method)
в Mono.Cecil.Cil.CodeReader.ReadMethodBody()
в Mono.Cecil.Cil.CodeReader.ReadMethodBody(MethodDefinition method)
в Mono.Cecil.MethodDefinition.<>c.<get_Body>b__41_0(MethodDefinition method, MetadataReader reader)
в Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TRet& variable, TItem item, Func`3 read)
в Mono.Cecil.MethodDefinition.get_Body()
 Mono.Cecil.MethodDefinition.get_DebugInformation()
в Mono.Debugging.Soft.SoftDebuggerSession.LoadPdbType(TypeDefinition type, Dictionary`2 fileToSourceFileInfos)
в Mono.Debugging.Soft.SoftDebuggerSession.LoadPdbFile(String assemblyFileName, String pdbFileName)
в Mono.Debugging.Soft.SoftDebuggerSession.LoadDebugFile(String assemblyFileName, String debugFileName, Func`3 loadDebugFile)
в Mono.Debugging.Soft.SoftDebuggerSession.CheckBetterMatch(TypeMirror type, String file, Int32 line, Int32 column, Location found)
в Mono.Debugging.Soft.SoftDebuggerSession.FindLocationByMethod(MethodMirror method, String file, Int32 line, Int32 column, Boolean& insideTypeRange)
в Mono.Debugging.Soft.SoftDebuggerSession.FindLocationByType(TypeMirror type, String file, Int32 line, Int32 column, Boolean& genericMethod, Boolean& insideTypeRange)
в Mono.Debugging.Soft.SoftDebuggerSession.ResolveBreakpoints(TypeMirror type)
в Mono.Debugging.Soft.SoftDebuggerSession.HandleTypeLoadEvents(TypeLoadEvent[] events)
в Mono.Debugging.Soft.SoftDebuggerSession.HandleEventSet(EventSet es)
в Mono.Debugging.Soft.SoftDebuggerSession.EventHandler()

为了进行分析,我使用 - dex2jar 和 Java Decompiler(通过 article)。 但是现在我不知道要寻找什么以及有什么问题。

有什么想法吗?

【问题讨论】:

所以这发生在Debug 配置中。上面的异常看起来更像是连接到软调试器的问题。由于在上面的跟踪中没有任何 Multidex 任务的痕迹,我很犹豫说它与 Multidex 相关,直到我们有一个最小的复制。您可以在帖子中添加一个吗? 嗨,乔恩。我的调试器现在正在工作!这是我的项目的问题。我的项目中有 XF 2.3.4.247。我安装了 XF 2.3.5.239(pre),然后删除它并安装了稳定版本 2.3.4.247。在那之后调试工作。感谢您的博客 - 这是非常有用的信息。我在等你关于 Xamarin Android 的书。 【参考方案1】:

我解决了这个问题。

这是详细描述我的用户案例:

    我使用了 PCL 库。 我需要将 Azure 移动客户端更新到 4.0 版。此版本不支持仅 PCL .NET Standard。 1.4. 但我有带有 Xamarin Forms 的 Windows Phone 项目。 .Net Standard 1.4 不支持 WP 我在我的解决方案中添加了新库(.NET Standard.1.4)。我将 PCL 中的文件作为链接添加到此库中。 然后出现了这个错误。起初它是一个浮动错误 - 但后来它是永久性的。 我花了整整两个工作日来寻找这个错误的原因。我找到了应用程序丢失的地方。 我从我的库 (.Net Standard) 中删除了相关文件,然后添加了它。现在可以调试了。

【讨论】:

以上是关于带有 multidex 的 Xamarin Android - 调试模式下的错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Studio 中启用 MultiDex 或 ProGuard 时出错

在导出的 Unity 项目中使用带有 Multidex 的 Fabric

Proguard 可以保存到 multidex 应用程序吗?

带有 xamarin 表单的 xamarin 本机视图加载缓慢

android MultiDex multiDex原理

带有原生 Android 工具栏的 Xamarin 表单