带有 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 应用程序吗?