我正在努力在Android应用程序中使用共享库。
我已经下载了jsqlite shared libs并将这些解压缩到我的项目中的HelloSpatialite / app / src / main / jniLibs目录中。 SO帖子(example)表示这是您在最近的Android Studio版本中需要做的全部内容。
这是我的目录列表:
HelloSpatialite / app / src / main / jniLibs]:ls -l <em> / .so
-rwxr-xr-x @ 1用户工作人员7778576 6月16日22:40 armeabi-v7a / libjsqlite.so
-rwxr-xr-x @ 1用户工作人员7782620 6月16日22:30 armeabi / libjsqlite.so
-rwxr-xr-x @ 1用户工作人员12080476 6月16日22:51 x86 / libjsqlite.so
我确认共享库已包含在APK as in step 3 here.
中但是,现在我无法使用此库中的类和函数。
如果my java code使用import jsqlite.Database;
,我将从Android Studio获得Error:(6, 15) error: package jsqlite does not exist
。
我正在尝试关注android-spatialite tutorial。本教程的代码示例来自eclipse时代,似乎也以稍微不同的方式获取jsqlite包。
有人可以帮助我走上正轨吗?
编辑:我的代码减去共享对象,位于github。
答案 0 :(得分:0)
我终于设法解决了这个问题。
由于共享库已经编译,我必须在package jsqlite;
保留相应的java文件命名空间。那么真正的问题是弄清楚如何将这些java文件保持在最高级别的范围内。
我最终修改了我的模块的AndroidManifest.xml,没有通常的&#34; yourcompany.packagename&#34;范围,而只是使用&#34; packagename&#34;。 平时:
<manifest
package="com.example.spatialite_database_driver">
</manifest>
变为
<manifest
package="spatialite_database_driver">
</manifest>
我不确定这是否是最理想的情况,但它让我的模块无需重新编译JNI代码即可运行。
我有在此处成功设置此模块的过程: https://github.com/kristina-hager/Spatialite-Database-Driver/blob/master/README.md 以及使用该模块的应用程序链接。
注意:对于这个模块,没有准备好的.jar或.aar文件可用,所以我在模块中使用共享对象+ java src文件。