You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows下Xamarin.Forms用SkiaSharp遇libSkiaSharp.so缺失异常求助

解决SkiaSharp System.DllNotFoundException: libSkiaSharp.so 异常

嘿,这个问题我之前在Xamarin.Forms项目里也踩过坑,主要是包版本不兼容和平台配置的问题,咱们一步步来搞定它:

首先,核心问题:SkiaSharp包版本混乱了

你现在装的SkiaSharp主包是v2.80.1,但SkiaSharp.Svg(v1.60.0)和SkiaSharp.Views.Forms(v1.68.3)都是旧的1.x版本——这几个包必须严格保持版本一致!SkiaSharp在2.x版本做了API大变更,跨版本混用直接会导致依赖库找不到的问题,更别说旧版的SkiaSharp.Svg已经停止维护,在2.x里它改名叫SkiaSharp.Svg.Forms了。

解决步骤:统一包版本

  1. 先卸载当前所有SkiaSharp相关的NuGet包:SkiaSharp、SkiaSharp.Svg、SkiaSharp.Views.Forms
  2. 重新安装同版本的包,针对你的Xamarin.Forms 4.5,直接选v2.80.1就行:
    • 可以在NuGet包管理器里搜这三个包,手动选v2.80.1;或者用Package Manager Console执行命令:
      Install-Package SkiaSharp -Version 2.80.1
      Install-Package SkiaSharp.Svg.Forms -Version 2.80.1
      Install-Package SkiaSharp.Views.Forms -Version 2.80.1
      

然后,确认Android平台的库支持

你说.so是Linux的库,没错,但Android是基于Linux内核的,所以调试Android项目时确实需要这个库。得确保:

  1. 打开Android项目的属性Android选项高级,勾选你需要支持的ABI(比如armeabi-v7a、arm64-v8a、x86这些常用的),SkiaSharp会自动为这些ABI打包对应的.so库。
  2. 清理并重新生成整个解决方案:点Visual Studio顶部菜单的生成清理解决方案,再点重新生成解决方案,确保所有依赖库都正确复制到输出目录。

最后,检查SVG加载的代码和文件设置

有时候文件路径不对或者生成操作没设对也会出问题,你可以参考这样的写法:

  • 如果SVG文件是Android项目的Asset:
    using (var stream = Assets.Open("your_svg_file.svg"))
    {
        svgImage.Load(stream);
    }
    
  • 如果是共享项目里的嵌入资源:
    var assembly = typeof(YourPageOrClass).Assembly;
    using (var stream = assembly.GetManifestResourceStream("YourProjectNamespace.your_svg_file.svg"))
    {
        svgImage.Load(stream);
    }
    

别忘了把SVG文件的生成操作设置成AndroidAsset(Android项目)或者Embedded Resource(共享项目)。

额外排查点

如果你是调试UWP/Windows项目却碰到这个异常,那大概率是误引用了Android平台的SkiaSharp库,去项目的NuGet引用里检查下,只保留对应平台的库就行;另外也确认下你的NuGet源是官方的,避免下载到损坏的包。


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

火山引擎 最新活动