I have a task of obfuscating my Xamarin Android project (let call it AndrProj) together with libraries it references: two PCL (let's call them PCL1 and PCL2) and Android library (AndrLib). PCL2 and AndrLib also have references to PCL1.
I was inspired by this article and decided to try Crypto Obfuscator For .Net v2015 demo version for my purposes.
I used its 'Visual Studio Project Integration Wizard'. PCL1 was set as 'First project' and AndrProj as 'Last project'. Only default settings were used for the beginning. Now when I build my project everything is perfect. Dll's in \bin\Release folder are obfuscated.
I would be completely happy if I could actually create an .apk file and try it on the Android device. But when I select Build -> Archive for Publishing in Xamarin Studio, after some time I see 'Build FAILED' and
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.
I also tried 'Export Android Package (.apk)' from Visual Studio 2013, but it gives less output and still does not create .apk.
I believe it complains only about AndrLib because it goes first alphabetically among PCL1, PCL2 and AndrLib. And more global problem is that creating .apk forces all assemblies to be obfuscated one more time. Is there any way to skip this second time obfuscation? Or to ignore this kind of problem?
Well, the solutions was pretty simple: I had to use MSBuild.exe directly with target SignAndroidPackage instead of creating .apk from IDE.
Here is an email from technical support regarding the described problem (may be useful for someone):
If your solution fails to build after doing MSBuild Integration, try the following:
Change the build output log verbosity as follows: Visual Studio Tools menu --> Options --> Projects And Solutions --> Build and Run --> MSBuild Project Build Output Verbosity, set this to Detailed.
Now check the Visual Studio Output window for any hints or more information regarding the cause of the error.
Change the number of threads used by MSBuild to 1 as follows: Visual Studio Tools menu --> Options --> Project And Solutions --> Build And Run --> Maximum number of parallel threads : set this to 1.
If you get an error message similar to "The assembly 'XYZ' is already obfuscated with Crypto Obfuscator..." when you Run (CTRL+F5) or Debug (F5) your solution, then try doing a Clean ( Visual Studio Build menu --> Clean menu item) and then do the Run (CTRL+F5) or Debug (F5).
Build failure can also occur if you ran the wizard multiple times, each time selecting a different "first" project. This problem usually presents itself via a "file not found" error in the build log/output. To solve this problem, start from clean non-integrated .csproj/.vbproj files (the wizard copies the original non-integrated project files to a .backup_%timestamp% extension before modifying the project files; alternately you can open the .csproj/.vbproj files in a text editor and remove the XML added by the wizard which can be found towards the end of the file). Then run the wizard again specifying the correct first and last projects.