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

Java 从Android应用程序中的共享库调用函数,java,android,android-studio,shared-libraries,Java,Android,Android Studio,Shared Libraries,我正在努力在Android应用程序中使用共享库 我已经下载了,并将它们解压缩到我的项目中的HelloSpatialite/app/src/main/jniLibs目录中。所以posts()说这就是在最近的androidstudio版本中需要做的所有事情 这是我的目录列表: HelloSpatialite/app/src/main/jniLibs]:ls-l/.so -rwxr-xr-x@1 user staff 7778576 Jun 16 22:40 armeabi-v7a/libjsqlit

我正在努力在Android应用程序中使用共享库

我已经下载了,并将它们解压缩到我的项目中的HelloSpatialite/app/src/main/jniLibs目录中。所以posts()说这就是在最近的androidstudio版本中需要做的所有事情

这是我的目录列表:

HelloSpatialite/app/src/main/jniLibs]:ls-l/.so

-rwxr-xr-x@1 user staff 7778576 Jun 16 22:40 armeabi-v7a/libjsqlite.so

-rwxr-xr-x@1 user staff 7782620 Jun 16 22:30 armeabi/libjsqlite.so

-rwxr-xr-x@1 user staff 12080476 Jun 16 22:51 x86/libjsqlite.so

我验证了共享库是否包含在APK中

但是,现在我无法使用此库中的类和函数

如果使用
导入jsqlite.Database,我将得到一个
错误:(6,15)错误:来自Android Studio的包jsqlite不存在

我正试着跟着这条路走。本教程的代码示例来自eclipse时代,并且似乎以稍微不同的方式获得jsqlite包

有人能帮我走上正轨吗


编辑:我的代码(不包括共享对象)处于打开状态。

我终于找到了答案

由于共享lib已经编译,我必须将相应的java文件名称空间保留在
packagejsqlite。当时真正的问题是弄清楚如何将这些java文件保持在顶级范围内

最后,我修改了模块的AndroidManifest.xml,使其不具有通常的“yourcompany.packagename”作用域,而只是使用了“packagename”。 通常:

<manifest
    package="com.example.spatialite_database_driver">
</manifest>

变成

<manifest
    package="spatialite_database_driver">
</manifest>

我不确定这是否是最理想的场景,但它可以让我的模块工作,而无需重新编译JNI代码

我在这里有成功设置此模块的过程: 以及使用该模块的应用程序链接


注意:对于这个模块,没有准备好的.jar或.aar文件可用,所以我在一个模块中使用共享对象+java src文件。

您的
AndroidManifest.xml
看起来像什么?您添加了
条目吗?我在本地的
AndroidManifest.xml
中尝试了这个
,但没有明显的区别。您链接的归档文件只包含jni库,但我想您还需要一个java API jar来链接它们。