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强制保留:
- 在项目中新建名为
Linker.xml的文件,设置其生成操作为LinkDescription - 添加以下规则:
<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..
相关产品推荐
相关产品推荐

