微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Spatialite中jsqlite.Database.internal_init中的java.lang.UnsatisfiedLinkError

我刚开始使用Android并使用Spatialite而无法弄清楚为什么我的应用程序因为这个错误而在一些设备上崩溃:

java.lang.UnsatisfiedLinkError:找不到void jsqlite.Database.internal_init()的实现(尝试过Java_jsqlite_Database_internal_1init和Java_jsqlite_Database_internal_1init__)
    at jsqlite.Database.internal_init(Native Method)
    在jsqlite.Database.(Database.java:25)

此崩溃报告来自带有Android 6.0的Nexus 5(hammerhead),但已在Xoom上报告了Android 4.1和其他一些未知设备.我认为它可能与这些问题中提到的NDK版本有关:

Adding “.so” library to my android studio project
Android NDK java.lang.UnsatisfiedLinkError: findLibrary returned null
https://bitbucket.org/almworks/sqlite4java/issues/71/arm64-bit.(虽然这是针对sqlite4java)

除此之外我还得到这个错误/警告(取决于设备):libjsqlite.so有文本重定位.这会浪费内存并防止安全性增强.请修理.虽然它没有像其他错误一样崩溃应用程序.

解决方法:

我通过设置应用程序built.gradle(或在AndroidManifest.xml中)解决了这个问题:

targetSdkVersion 21

它的工作原理!
我知道这不是一个好的解决方案,它是一个补丁,但我工作!

*** UPDATE

如果无法将目标版本更改为21,则可以执行以下操作:

>从以下网址下载源代码https://github.com/geopaparazzi/geopaparazzi
>将项目中的所有引用清除为spatialite,.war文件和jndi库
>复制模块geopaparazzispatialitelibrary并集成到您的项目中
>清除模块中不需要的代码
>编译,享受您的项目目标版本23

这是一个复杂的过程,但它的工作原理.

特别感谢andrea antonello,他帮助我解决了这个问题,并且做了很好的工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐