When building a Xamarin Android app and using the option to
Enable ProGuard, we may get the following error:
error MSB6006: "java.exe" exited with code 1
|
Note: Proguard
is a file shrinker/optimizer which is often used on a release version. This can
be found on the Android Options tab.
The error means that java is not able to build the
application due to some an error that is raised during the build process. To
find out what the error details, we need to set the MSBuild verbosity mode to
Diagnostic which provides detail log on each step during the build. We can
change the verbosity mode from Visual Studio Build and Run settings which can
be found on the following menu option:
Tools->Options->Project
and Solutions-Build and Run
Once this option is set, we should be able to compile again
and see more detail about what is happening. If we look at the MSBuild output
(output window on Visual Studio), we can find the error or exception that can
provide more insight on the problem.
For this case, we can see that there is an error associated
to the proguard tool. The error reads that there is an unknown option on the
configuration file proguard.cfg.
proguard.ParseException: Unknown option '-dontwarn'
in line 1 of file 'proguard.cfg', (TaskId:226)
|
If we look carefully, we can see that there is a funny
character on the error message. This
leads us to think that there is some junk data in the proguard.cfg file, or
there is an encoding problem.
Solution:
The proguard
tool does not handle files that contain Byte Order Mark BOM.
Visual Studio creates files with this information. The BOM is used to indicate
the file encoding type. To see and remove that encoding, use a tool like
Notepad++ and save the file without the BOM encoding which is a menu option
when saving the file.
After removing the BOM from the file, we should be able to
build the project again and see a successful build. Inspecting the log, we can
also see that the proguard task completes with no errors:
Done executing task "Proguard". (TaskId:179)
|
Hopefully this can help solve
similar errors when building Xamarin Android Apps.