xamarin System.DllNotFoundException:/系统/库/libsqlite.so

vql8enpb  于 2023-03-16  发布在  SQLite
关注(0)|答案(3)|浏览(164)

我在xamarin表单项目中遇到了SQLite问题。但是SQLiteConnection我试图在Android平台中示例化,出现了异常。
在Android和iOS项目中使用的库

  • 网络版-PCL3.1.1
  • SQLite网络核心-PCL 3.1.1

清单文件目标版本

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="27" />

安卓SQLite.cs文件

using SQLite;
using SQLite.Net;
using System.IO;
namespace XamarinTestList.Droid.Implementations
{
public class AndroidSQLite : ISQLite
{
    public SQLiteConnection GetConnection()
    {
        string documentPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        var path = Path.Combine(documentPath, DatabaseHelper.DbFileName); //DbFileName="Contacts.db"
        var plat = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
        string dpPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "user.db3");
        var conn= new SQLiteConnection(plat, dpPath);
        return conn;
    }
}
}

正在获取异常

var conn= new SQLiteConnection(plat, dpPath);

我已经在解决方案级别安装了上述库,但在 * 共享项目 * 中,没有安装Nuget包的选项。共享项目屏幕截图

跟随本文学习SQLite和xamarin xamarin forms-mvvm-sqlite-sample
完整例外情况如下
{系统. DLL未找到异常:/system/lib/libsqlite.so,位于( Package 器管理到本机)SQLite.Net.Platform.XamarinAndroid.SQLiteApiAndroidInternal.sqlite3_open_v2(字节[],整数指针&,整数,整数指针),位于SQLite.Net.平台. XamarinAndroid.SQLiteApiAndroid.打开(系统.字节[]文件名,SQLite.Net.互操作. IDb句柄&数据库,系统.整数32标志,系统.整数指针zvfs)[0x 00000],位于<8dbf6ff85082469fb9d4dfaa9eae6b69>:0,位于SQLite .NET. SQLiteConnection.. ctor(SQLite.Net.Interop.ISQLitePlatform sqlitePlatform,系统.字符串数据库路径,SQLite.Net.Interop.SQLiteOpenFlags openFlags,系统.布尔值存储DateTimeAsTicks,SQLite.Net.IBlobSerializer序列化程序,系统.集合.通用.标识词典2[TKey,TValue] tableMappings, System.Collections.Generic.IDictionary 2[TKey,TValue]额外类型Map,SQLite.Net.IContractResolver解析器)[0x 000 a2]位于<8f2bb39aeff94a30a8628064be9c7efe>:0位于SQLite. Net. SQLiteConnection.. ctor(SQLite.Net.Interop.ISQLitePlatform sqlitePlatform,系统.字符串数据库路径,系统.布尔存储DateTimeAsTicks,SQLite.Net.IBlobSerializer序列化程序,系统.集合.通用.标识词典2[TKey,TValue] tableMappings, System.Collections.Generic.IDictionary 2[TKey,TValue] extraTypeMappings,SQLite.Net.IContractResolver解析器)[0x 00000]位于<8f2bb39aeff94a30a8628064be9c7efe>:0

iqxoj9l9

iqxoj9l91#

您使用的SQLite.Net-PCL nuget不再由其作者维护。您需要切换到其他类似的软件包sqlite-net-pcl
首先从所有项目中删除现有的SQLite.Net-PCL nuget并安装我上面提到的那个,从所有文件中删除所有旧的SQLite相关引用。
您需要在与SQLite连接相关的依赖关系服务类中进行一些更改。然后,您可以调整与SQLite相关的一些其他代码。通过为新的nuget包添加适当的using语句来解决引用问题。
我得到了同样的错误,我解决了它切换到上述nuget包。

注意:新的nuget包还没有InsertOrReplaceAll方法。因此,如果您已在以前的nuget中使用此方法,则对于新的nuget,您需要创建InsertOrReplaceAll extension method
编辑:要获取SQLiteConnection:

public SQLiteConnection GetConnection()
{
    return new SQLiteConnection(dpPath, false);
}

在此新块中无需传递平台。如果不希望将DateTime存储为刻度,请传递false

olmpazwi

olmpazwi2#

2个选择
1.更改targetSdkVersion〈24,自Android 7以来,应用程序无法访问系统私有库。
1.将www.example.com添加libsqlite.so到您自己的lib文件夹中。

dxxyhpgq

dxxyhpgq3#

虽然有点晚了,但是对于面临同样问题的人来说,您只需要在本机代码中添加一行

[assembly: Xamarin.Forms.Dependency(typeof(AndroidSQLite))]

如果这不起作用,请卸载现有的sqlite-net-pcl并安装sqlite-net-pcl此库,然后重试

相关问题