AndroidX: Mono.Cecil.ResolutionException: Failed to resolve AndroidX.AppCompat.Graphics.Drawable.DrawableWrapper
Android application type
Classic Xamarin.Android (MonoAndroid12.0, etc.)
Affected platform version
VS 2022
Description
Ran migration to AndroidX, and application no longer compiles. Dependencies here:
<ItemGroup>
<PackageReference Include="Huawei.Agconnect.AgconnectCore">
<Version>1.5.0.301</Version>
</PackageReference>
<PackageReference Include="Huawei.Hms.Push">
<Version>6.3.0.304</Version>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers">
<Version>3.3.4</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Xam.Plugin.Geolocator">
<Version>4.5.0.6</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat">
<Version>28.0.0.3</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.Core.Utils">
<Version>1.0.0.15</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat">
<Version>1.6.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.RecyclerView">
<Version>1.2.1.8</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Activity">
<Version>1.6.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.AppCompat.AppCompatResources">
<Version>1.6.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Biometric">
<Version>1.1.0.11</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Common">
<Version>120.2.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Iid">
<Version>121.1.0.7</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Messaging">
<Version>123.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2545" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.4" />
<PackageReference Include="Xamarin.GooglePlayServices.Base">
<Version>118.1.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Basement">
<Version>118.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Gcm">
<Version>117.0.0.7</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Tasks">
<Version>118.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Migration" Version="1.0.10" />
</ItemGroup>
Error here:
Mono.Linker.MarkException: Error processing method: 'System.Void Xamarin.Forms.Platform.Android.ShellSearchView/ClipDrawableWrapper::.ctor(Android.Graphics.Drawables.Drawable)' in assembly: 'Xamarin.Forms.Platform.Android.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve AndroidX.AppCompat.Graphics.Drawable.DrawableWrapper
at Mono.Linker.Steps.MarkStep.HandleUnresolvedType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
at Mono.Linker.Steps.MarkStep.ProcessQueue()
--- End of inner exception stack trace ---
at Mono.Linker.Steps.MarkStep.ProcessQueue()
at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
at Mono.Linker.Steps.MarkStep.Process()
at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
at Mono.Linker.Pipeline.Process(LinkContext context)
at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
at Xamarin.Android.Tasks.LinkAssemblies.RunTask()
at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17 XXXXXXXXX.Android
Relevant log output
C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: Mono.Linker.MarkException: Error processing method: 'System.Void Xamarin.Forms.Platform.Android.ShellSearchView/ClipDrawableWrapper::.ctor(Android.Graphics.Drawables.Drawable)' in assembly: 'Xamarin.Forms.Platform.Android.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve AndroidX.AppCompat.Graphics.Drawable.DrawableWrapper
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.HandleUnresolvedType(TypeReference reference)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessQueue()
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: --- End of inner exception stack trace ---
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessQueue()
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.Process()
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Mono.Linker.Pipeline.Process(LinkContext context)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Xamarin.Android.Tasks.LinkAssemblies.RunTask()
8>C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Legacy.targets(648,5): error XALNK7000: at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17
About this issue
- Original URL
- State: closed
- Created a year ago
- Reactions: 1
- Comments: 27 (4 by maintainers)
Looking at the decompiled Java, Google did in fact rename these classes in
1.6.0:1.5.1
1.6.0
Note that while turning off linking may let your application compile, it will not allow it to run. It will likely crash when XF tries to use this class.
Reference: https://android.googlesource.com/platform/frameworks/support/+/de70044326e54d6a50f0745f481bd46927cb777a
Hi, have you try to do what I wrote days ago? Something about configure “None” in “Linking”. I would like to know if this workaround is ok (for me is ok because I have been able to build in Debug and Release mode). Please, tell me. Good luck!
Unfortunately we maintain roughly ~500 Android packages that are constantly being updated, so doing anything manually is largely out of the question.
I think a longer term solution that may help is https://github.com/xamarin/java.interop/issues/1081. Even though these API (and others) are “public”, Google considers them “internal” and therefore does not feel the need to maintain API compatibility.
If this information was surfaced to C# consumers, they would be aware of the risk and would hopefully choose “safer” API to use. I suspect for this particular case, the Xamarin.Forms team had no idea this API was not considered “public”, “stable” API.
yes, XF uses it internally