Xamarin.Android应用上的Vague Dotfuscator错误

时间:2018-11-14 00:02:41

标签: android xamarin dotfuscator

在Xamarin.Android应用的发行版上运行Dotfuscator时,出现以下错误: enter image description here

如果我禁用Dotfuscator,则一切正常。奇怪的是,它可以在该应用程序的早期版本上正常工作。在此新版本的应用程序中,我仅添加了少数几个Android ContentProvider和一个NuGet软件包。没有其他的。有什么想法吗?


更新

因此,正如乔·塞维尔(Joe Sewel)解释的那样,从技术上讲,此问题不是与Dotfuscator有关,而是与Xamarin.Android有关。 Xamarin的系统在生成Java类时,会从.NET中介语言文件中提取的字符串填充其名称,而无需首先检查这些字符串是否实际上可用作Java类名称。

在我的情况下,问题是由于我的项目中有两个混淆的C#类太多。 Dotfuscator正在将我的课程之一重命名为do(经过正常的重命名周期:abacad等)。显然,do不能用作Java类名,因为它是Java保留关键字,因此稍后会在Xamarin工具中引起语法错误。删除或让Dotfuscator忽略项目中的任何两个类,导致Dotfuscator在其循环中未达到do名称,并且此问题已解决。因此,在Xamarin.Android中修复此错误之前,存在混淆项目中太多类的问题。

1 个答案:

答案 0 :(得分:2)

似乎正在发生的事情是Dotfuscator将类型重命名为do,这对于非库.NET Framework项目是安全的,因为.NET中间语言不会保留该单词。 Xamarin.Android的“胶水”代码然后根据模糊的.NET程序集的类型名称创建Java代码,并且由于do是Java中的保留字,因此会导致Java编译器错误。

要变通解决此问题,您可以使用Dotfuscator社区用户界面来exclude正在重命名的类型。 您可以使用重命名映射文件(例如DotfuscatorReports\Release\Renaming.xml)来查看原始源代码名称和模糊名称之间的映射,包括内置的decoding tool

我在Dotfuscator团队工作,并以此身份回答。我也filed an issue with Xamarin链接到有关这些错误的问题。