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.viewmodeletc….
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
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 !