从Android应用程序中的共享库调用函数

时间:2015-08-29 20:06:16

标签: java android android-studio shared-libraries

我正在努力在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

1 个答案:

答案 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文件。