我最近转向了SQLite-net,因为它支持Android 7.0中的新变化,但它给我带来了重大问题。我认为它与链接器有关,但不太确定如何处理这个问题。
首先,如果在debug&中构建我的应用程序释放它完美的工作。没有问题。如果我然后归档我的应用程序(生成签名的APK),它将根据链接器设置在不同的点开始崩溃。
如果我将我的应用设置为使用Sdk&用户程序集,我的应用程序立即崩溃。以下是日志的一部分: -
Caused by: android.runtime.JavaProxyThrowable: SQLite.SQLiteException: duplicate column name: objectId
at SQLite.SQLite3.Prepare2 (SQLitePCL.sqlite3 db, System.String query) [0x0001e] in <1096ddd2a2894a619279903f1fa07799>:0
at SQLite.SQLiteCommand.Prepare () [0x00011] in <1096ddd2a2894a619279903f1fa07799>:0
如果我将我的应用设置为仅使用Sdk,那么它的工作方式会有所不同。它实际上启动了应用程序,下载了一半的数据。如果我尝试通过添加更多崩溃来更新数据。该应用程序将在每次启动时崩溃,直到我删除该应用程序的整个本地存储,然后它才能完美运行。
我已经阅读过关于跳过链接程序集的内容,在这种情况下我跳过了所有与SQL相关的库。
--linkskip=SQLite-net --linkskip=SQLite.NET --linkskip=SQLite.Net.Platform.XamarinAndroid --linkskip=SQLite.Net.Platform.XamarinAndroidN --linkskip=SQLiteNetExtensions --linkskip=SQLitePCLRaw.batteries_green --linkskip=SQLitePCLRaw.batteries_v2 --linkskip=SQLitePCLRaw.core --linkskip=SQLitePCLRaw.lib.e_sqlite3 --linkskip=SQLitePCLRaw.provider.e_sqlite3
有没有人对如何解决这个问题有任何想法。我想很快发布一个应用程序,但无法解决这个问题。我的iOS应用程序也发生了非常相似的事情,它们在同一个数据库上运行。
提前致谢!
答案 0 :(得分:0)
好的,所以我发现了该做什么,以及如何克服这个问题。
如果您遇到此问题,很可能是因为您正在根据模型创建表格。在许多情况下,这是明智之举。但请注意,这是使用反射。值得在github的FAQ中注意到:
由于sqlite-net使用反射,因此MT链接器无法识别它需要各种属性。然后它将这些属性从类中剥离。
https://github.com/praeclarum/sqlite-net/wiki/FAQ
那么现在呢?
我看到你有两个选择。
[保留]属性
对于这种方法,我不是很有经验。事实上,我还没有找到好的文档来指导我。所以我无法对此发表评论。
写出您的创建语句
只需做一个
connection.Execute("create table .....");
这将允许您创建没有重复列的表,从而使用链接器。万岁!