将 Crypto Obfuscator 引入 Xamarin.Android 项目后无法创建 .apk 文件

Cannot create .apk file after introducing Crypto Obfuscator into Xamarin.Android project

我的任务是混淆我的 Xamarin Android 项目(我们称之为 AndrProj)以及它引用的库:两个 PCL(我们称之为它们 PCL1PCL2) 和 Android 库 (AndrLib). PCL2AndrLib 也引用了 PCL1.

我的灵感来自 this article and decided to try Crypto Obfuscator For .Net v2015 demo version for my purpose。

我用了它的'Visual Studio Project Integration Wizard'。 PCL1 被设置为 'First project',AndrProj 被设置为 'Last project'。开始时仅使用默认设置。现在,当我构建我的项目时,一切都很完美。 \bin\Release 文件夹中的 Dll 已被混淆。

如果我真的可以创建一个 .apk 文件并在 Android 设备上试用,我会非常高兴。但是当我 select Build -> Archive for Publishing in Xamarin Studio 时,一段时间后我看到 'Build FAILED' 和

Error occurred while obfuscation: - The assembly 'AndrLib' is already obfuscated with Crypto Obfuscator. If you have run the Visual Studio Project Integration Wizard on your Visual Studio projects, you cannot obfuscate from the Crypto Obfuscator UI unless you first disable automatic obfuscation for this project from Crypto Obfuscator's 'Project' menu --> 'Enable/Disable Visual Studio Integration' and Rebuild your solution in Visual Studio to produce unobfuscated assemblies.

我还尝试了 Visual Studio 2013 年的 'Export Android Package (.apk)',但它提供的输出较少并且仍然没有创建 .apk。

我相信它只抱怨 AndrLib 因为它在 PCL1 中按字母顺序排在第一位PCL2AndrLib。更全球性的问题是创建 .apk 会强制所有程序集再次被混淆。有什么办法可以跳过第二次混淆吗?还是忽略这种问题?

好吧,解决方案非常简单:我必须直接将 MSBuild.exe 与目标 SignAndroidPackage 一起使用,而不是从 IDE.

创建 .apk

这是一封来自技术支持的关于所描述问题的电子邮件(可能对某些人有用):

如果您的解决方案在执行 MSBuild 集成后无法生成,请尝试以下操作:

按如下方式更改构建输出日志的详细程度: Visual Studio 工具菜单 --> 选项 --> 项目和解决方案 --> 生成和 运行 --> MSBuild 项目生成输出详细信息,将其设置为详细。

现在检查 Visual Studio 输出 window 以获取有关错误原因的任何提示或更多信息。

将MSBuild使用的线程数改为1,如下: Visual Studio 工具菜单 --> 选项 --> 项目和解决方案 --> 构建和 运行 --> 最大并行线程数:将其设置为 1。

如果您在 运行 (CTRL+F5) 或调试 (F5) 您的解决方案时收到类似于 "The assembly 'XYZ' is already obfuscated with Crypto Obfuscator..." 的错误消息,请尝试执行清理(Visual Studio 构建菜单 --> 清除菜单项)然后执行 运行 (CTRL+F5) 或调试 (F5)。

如果多次 运行 向导,每次选择不同的 "first" 项目,也可能会发生构建失败。此问题通常通过构建 log/output 中的 "file not found" 错误出现。要解决此问题,请从干净的非集成 .csproj/.vbproj 文件开始(向导在修改项目文件之前将原始非集成项目文件复制到 .backup_%timestamp% 扩展名;或者您可以打开 .csproj/ .vbproj 文件并删除向导添加的 XML,可以在文件末尾找到)。然后 运行 向导再次指定正确的第一个和最后一个项目。

我在存档时遇到问题,在我将 Visual Studio 2017 Professional 从 15.9.9 降级到 15.7.6 后问题消失了。