使用sqlite与ARC Welder和Xamarin

时间:2015-04-09 13:56:22

标签: android xamarin google-chrome-arc

我有一个使用sqlite数据存储的Xamarin应用程序(使用sqlite-net)。当我使用ARC Welder在Windows机器上启动应用程序时,我收到错误。

E/mono-rt (  204): [ERROR] FATAL UNHANDLED EXCEPTION: 
    System.DllNotFoundException: /system/lib/libsqlite.so
E/mono-rt (  204): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
E/mono-rt (  204): at Android.Runtime.JNIEnv.NewString (string) <0x00093>
E/mono-rt (  204): at Java.Lang.Throwable..ctor (string) <0x0003b>
E/mono-rt (  204): at Android.Runtime.JavaProxyThrowable..ctor (System.Exception) <0x0001f>
E/mono-rt (  204): at Java.Lang.Throwable.FromException (System.Exception) <0x0009f>
E/mono-rt (  204): at Android.Runtime.AndroidEnvironment.UnhandledException (System.Exception) <0x0015f>

有什么方法可以解决这个问题吗?是否有可能创建一个在Java Welder上运行的本地使用sqlite的Android Java应用程序,或者是ARC无法使用的sqlite?

2 个答案:

答案 0 :(得分:2)

如果ARC没有创建/ system / lib文件夹,以下是可以解决此问题的类似问题的答案。当应用程序启动时,将部件添加到您自己的sqlite.so到PATH环境变量的开头。 (见https://github.com/praeclarum/sqlite-net/issues/343

string path=Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "lib");
Environment.SetEnvironmentVariable("PATH", path+";"+Environment.GetEnvironmentVariable("PATH"), EnvironmentVariableTarget.Process);

适用于Android的Sqlite:https://www.sqlite.org/android/doc/trunk/www/index.wiki

答案 1 :(得分:1)

ARC不会创建/ system / lib目录。 Android Framework 在内部使用SQLite,但出于性能原因,我们使用静态库。

然而,应用程序想要加载共享库以供自己使用似乎是合理的。请提交bug

如果你现在真的需要它,你可以在.APK中为ARC包含libsqlite.so。但是,我不确定你需要对sqlite-net做什么才能让它从备用位置加载.so。