【问题标题】:Vague Dotfuscator error on Xamarin.Android appXamarin.Android 应用程序上的模糊 Dotfuscator 错误
【发布时间】:2018-11-14 00:02:40
【问题描述】:

在我的 Xamarin.Android 应用程序的发布版本上运行 Dotfuscator 时,我收到以下错误:

如果我禁用 Dotfuscator,那么一切正常。奇怪的是它在应用程序的早期版本上运行良好。在这个新版本的应用程序中,我只添加了少数 Android ContentProviders 和一个 NuGet 包。没有其他的。有什么想法吗?


更新

因此,正如 Joe Sewel 所解释的,从技术上讲,问题不在于 Dotfuscator,而在于 Xamarin.Android。 Xamarin 的系统在生成 Java 类时,会使用从 .NET 中间语言文件中提取的字符串填充它们的名称,而无需首先检查这些字符串是否真的可以用作 Java 类名。

就我而言,问题是因为我的项目中有两个太多混淆的 C# 类。 Dotfuscator 正在将我的一个班级重命名为 do(在经历了正常的重命名周期后:abacad 等)。显然,do 不能用作 Java 类名,因为它是 Java 的保留关键字,所以它在后面的 Xamarin 工具中造成了语法错误。删除或让 Dotfuscator 忽略我项目中的任何两个类,导致 Dotfuscator 在其周期中无法到达 do 名称,问题已得到解决。因此,在 Xamarin.Android 中修复此错误之前,您的项目中存在混淆太多类这样的事情。

【问题讨论】:

  • 看来 Java Activity 名称被弄乱了,但我无法确定,因为您使用了图像来表示错误......不要使用图像来表示错误,复制/粘贴格式化的错误文本到您的问题中。
  • @sushihangover 就是这样。很长的 Java 语法错误列表。除了 Java 语法错误之外,没有其他有用的消息。某处的某些工具正在生成无效的 Java 文件。
  • 我在 Dotfuscator 团队工作。正如 SushiHangover 所提到的,它看起来像是引用重命名活动的 Java“胶水”代码的问题,从错误的文件名来看,它是 ab。您使用的是什么版本的 Dotfuscator?你也可以试试increasing the verbosity of the build logging to Detailed,它会指出这些错误发生在哪里。
  • @JoeSewell 我使用的是 5.36.0.7050 版本,我认为构建输出的详细版本并没有多大帮助。只是差不多。

标签: android xamarin dotfuscator


【解决方案1】:

似乎正在发生的事情是 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,链接到这个问题,关于这些错误。

【讨论】:

  • 就我而言,它不仅仅是一个类,而是我通过排除命名空间和类来缩小范围的两个。那么,为什么是这两个类呢?我一直认为混淆的名称只是被回收了:aa、ab、ac 等等。如果是这样,那么排除这两个有问题的类不会简单地导致列表中下一个未排除的类获得“do”名称吗?还是 Dotfuscator 使用原始类名作为“种子”来确定其混淆名称?如果是这样,我可以将类重命名为会生成无问题的混淆名称的名称吗?
  • @AxiomaticNexus 只有在 Java“胶水”代码中使用重命名的类型时才会出现该问题,这似乎不是程序集中的所有类型。如果没有给定 Java 等效项的某些其他类型被命名为 do,则不应发生此问题。
猜你喜欢
  • 2018-03-14
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2021-03-13
  • 2018-06-29
  • 1970-01-01
相关资源
最近更新 更多