Too many field references to fit in one dex file: 67428; max is 65536. – When Building Xamarin.Android project in VSTS

Objective

When I was trying to build one of my Xamarin.Forms (Android) project in Azure DevOps pipeline, the pipeline build was failed and got this error

trouble writing output: Too many field references to fit in one dex file: 67428; max is 65536.
You may try using multi-dex. If multi-dex is enabled then the list of classes for the main dex list is too large.
References by package:
29 android.app
3066 android.arch.core
8 android.arch.core.executor
14 android.arch.core.internal
3161 android.arch.lifecycle
3066 android.arch.lifecycle.livedata
3066 android.arch.lifecycle.livedata.core
3066 android.arch.lifecycle.viewmodel

etc….

And finally the result was..

“D:\a\3\s\\PathToProject\src\MyProject.Mobile.Droid\MyProject.Mobile.Droid.csproj” (PackageForAndroid target) (1) ->
(_CompileToDalvikWithDx target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2610,3): error MSB6006: “java.exe” exited with code 2. [D:\a\3\s\PathToProject\src\MyProject.Mobile.Droid\MyProject.Mobile.Droid.csproj]

14 Warning(s)
1 Error(s)

Time Elapsed 00:02:24.15
##[error]Process ‘msbuild.exe’ exited with code ‘1’.

So I looked why it happen and finally I found the reason..

Reason

The reason was according to the libraries I have added, the the number of references are too much for a Default size of the Dex file which is 65536. But my packages had 67428 references.

To Learn more about Multi-Dex visit below link…

https://docs.microsoft.com/en-us/xamarin/android/deploy-test/release-prep/?tabs=windows#multi-dex

Multi-Dex

When the Enable Multi-Dex option is enabled, Android SDK tools are used to bypass the 65K method limit of the .dex file format. The 65K method limitation is based on the number of Java methods that an app references (including those in any libraries that the app depends on) – it is not based on the number of methods that are written in the source code. If an application only defines a few methods but uses many (or large libraries), it is possible that the 65K limit will be exceeded.

It is possible that an app is not using every method in every library that is referenced; therefore, it is possible that a tool such as ProGuard (see above) can remove the unused methods from code. The best practice is to enable Enable Multi-Dex only if absolutely necessary, i.e.the app still references more than 65K Java methods even after using ProGuard.

For more information about Multi-Dex, see Configure Apps with Over 64K Methods.

Solution

So What I had to do is.. Enable the Multi-Dex in my android project for Debug and Release configurations

EnableMultidex

Result

Then Build The project again on pipeline and it will build successfully

References

https://docs.microsoft.com/en-us/xamarin/android/deploy-test/release-prep/?tabs=windows#multi-dex

 

Thanks !