You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android发布构建时Lottie包报Mono.Linker错误求助

Xamarin Android发布构建Lottie链接器错误解决办法

更新Xamarin.Firebase.Messaging(123.3.1.2)、Xamarin.Firebase.Iid(121.1.0.14)、Microsoft.Azure.NotificationHubs(4.2.0)、Xamarin.Azure.NotificationHubs.Android(1.1.4.1)库后,Android发布构建时抛出链接器错误,具体错误信息如下:

Error       Mono.Linker.MarkException: Error processing method: 'AndroidX.Collection.SparseArrayCompat Com.Airbnb.Lottie.LottieComposition::get_Characters()' in assembly: 'Lottie.Android.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve AndroidX.Collection.SparseArrayCompat
   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.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()

以下是经过验证的可行解决步骤:

1. 强制更新AndroidX.Collection依赖包

报错核心是AndroidX.Collection.SparseArrayCompat类型无法被解析,该类型属于Xamarin.AndroidX.Collection库。需确保项目引用该库的最新稳定版本:

  • 打开NuGet包管理器,搜索Xamarin.AndroidX.Collection并更新至最新版
  • 或手动编辑项目文件,添加/更新包引用:
<PackageReference Include="Xamarin.AndroidX.Collection" Version="1.2.0.1" />

(注:版本号以NuGet上的最新稳定版为准)

2. 配置链接器规则保留必要类型

发布构建时的链接器优化可能误移除了SparseArrayCompat类型,可通过Linker.xml强制保留:

  1. 在项目中新建名为Linker.xml的文件,设置其生成操作为LinkDescription
  2. 添加以下规则:
<linker>
  <assembly fullname="Xamarin.AndroidX.Collection">
    <type fullname="AndroidX.Collection.SparseArrayCompat" preserve="all" />
  </assembly>
  <assembly fullname="Lottie.Android">
    <type fullname="Com.Airbnb.Lottie.LottieComposition" preserve="all" />
  </assembly>
</linker>

3. 调整链接器优化级别

临时降低链接器优化级别验证问题:

  • 打开项目属性 → Android选项 → 链接器行为
  • 将选项从Sdk程序集和用户程序集改为仅Sdk程序集,或临时设置为不链接
  • 重新尝试发布构建,若问题解决,再逐步调整回原级别并配合Linker.xml规则优化

4. 清理项目缓存并重建

执行以下操作清除旧构建缓存:

  • 删除项目根目录下的bin和obj文件夹
  • 在NuGet包管理器中执行清理所有NuGet缓存
  • 重新生成解决方案后再尝试发布构建

5. 同步Lottie.Android包版本

确保Lottie.Android包版本与当前AndroidX生态兼容,建议更新至最新稳定版,避免版本不匹配导致的依赖冲突。

内容的提问来源于stack exchange,提问作者Ricko..

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:51:18