【发布时间】: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(在经历了正常的重命名周期后:ab、ac、ad 等)。显然,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