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

MAUI Android迁移后Mono.Data.SQLite报sqlite3缺失异常求助

MAUI .NET 8 Android端Mono.Data.SQLite缺失libsqlite3.so的解决办法

问题背景

将Xamarin项目迁移至MAUI .NET 8后,使用Mono.Data.SQLite实现SQLite连接时,iOS端运行正常,但Android端抛出以下异常:

System.DllNotFoundException: sqlite3 at Mono.Data.Sqlite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum flags, Int32 maxPoolSize, Boolean usePool) at Mono.Data.Sqlite.SqliteConnection.Open()

经排查,问题根源为MAUI Android环境中缺少libsqlite3.so原生库。

解决步骤

1. 准备对应架构的libsqlite3.so文件

  • 在MAUI项目的Platforms/Android目录下创建libs文件夹,在其下分别创建子文件夹:armeabi-v7a、arm64-v8a、x86、x86_64(覆盖主流Android架构)。
  • 获取对应架构的libsqlite3.so文件(可从Android NDK或SQLite官方预编译资源中提取),放入对应子文件夹内。

2. 设置文件生成操作

  • 选中所有libsqlite3.so文件,在属性窗口中设置生成操作为AndroidNativeLibrary,确保编译时库会被打包到APK中。

3. 配置项目文件(确保引用生效)

打开MAUI项目的.csproj文件,添加以下配置,确保Android平台正确识别原生库:

<ItemGroup Condition="$(TargetFrameworkContains('-android'))">
  <AndroidNativeLibrary Include="Platforms\Android\libs\**\libsqlite3.so" />
</ItemGroup>

4. 验证库加载(可选)

在App启动逻辑中添加库加载验证代码,提前确认库可正常加载:

using System.Runtime.InteropServices;

// 在App类中添加
[DllImport("sqlite3", EntryPoint = "sqlite3_version", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr Sqlite3Version();

public App()
{
    InitializeComponent();
    // 验证sqlite3库是否加载成功
    try
    {
        var versionPtr = Sqlite3Version();
        var version = Marshal.PtrToStringAnsi(versionPtr);
        Console.WriteLine($"SQLite版本:{version}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"加载sqlite3库失败:{ex.Message}");
    }
}

完成以上步骤后,重新编译运行Android项目,即可解决System.DllNotFoundException异常,原有Mono.Data.SQLite的代码无需改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:39:58