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)

Most upvoted comments

Looking at the decompiled Java, Google did in fact rename these classes in 1.6.0:

1.5.1

image

1.6.0

image

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.