1

我有一个使用 sqlite 数据存储(使用 sqlite-net)的 Xamarin 应用程序。当我使用 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>

有没有办法解决这个问题?是否可以创建一个原生使用 sqlite 并在 ARC Welder 上运行的 Android Java 应用程序,或者 sqlite 是 ARC 不可用的东西?

4

2 回答 2

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

于 2015-06-12T15:27:36.147 回答
1

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

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

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

于 2015-04-13T18:49:29.850 回答