如何在jar中从Android应用程序加载本机共享对象?

nit*_*itz 5 android shared-libraries

我有一个共享对象,我称之为'libFoo.so',针对NDK进行编译.我有一个java项目(我称之为'jarlib')通过调用来利用该共享对象

System.loadLibrary("Foo");
Run Code Online (Sandbox Code Playgroud)

那个java项目,我作为jar导出,并在android应用程序中使用.如果我注释掉有关共享对象的所有内容,那么jar工作正常,并且我能够完美地与它进行交互.

我可以使用jarlib,以及来自Unity android应用程序的共享对象和./lib/armeabi/libFoo.so中的共享对象,并将它加载到所有peachy.

我正在尝试在我的非统一Android应用程序中使用jarlib和libFoo.so,而loadLibrary绝对拒绝找到libFoo.so.我已经尝试放置它,所以它将被包含在我的apk中./lib,以及./lib/armeabi,似乎没有任何东西使加载调用看到它.

我已经尝试在jarlib的./lib或./lib/armeabi中包含libFoo.so,但是一旦我尝试构建/运行我的Android应用程序,我就会被告知:

The library 'jarlib.jar' contains native libraries that will not run on the device.
The following libraries were found:
  - libFoo.so
Run Code Online (Sandbox Code Playgroud)

有这个,如果它在./lib(不是./lib/armeabi)

Additionally some of those libraries will interfer with the installation of the application because of their location in lib/
lib/ is reserved for NDK libraries.
Run Code Online (Sandbox Code Playgroud)

我不确定我缺少什么组合,但我确信它可以完成,我似乎无法弄明白该怎么做!

nit*_*itz 6

好!事实证明它是如此微小的东西,它导致我八小时的头痛.

我发现我的libFoo.so没有显示在我的app.apk/lib/armeabi/libFoo.so中,就像Unity在构建apks时那样.我认为它与此有关,所以我开始寻找设置以确保我的lib文件夹被复制到apk.

事实证明,lib文件夹不是,但是......

还记得我说过我试过的(在Android应用程序端):

./lib/libFoo.so
-and-
./lib/armeabi/libFoo.so
Run Code Online (Sandbox Code Playgroud)

事实证明,我需要做的就是把它放在类似的路径上.哦,这么相似.

./libs/armeabi/libFoo.so
Run Code Online (Sandbox Code Playgroud)

是啊.库.用s.

事实上,当我将我的文件夹'lib'重命名为'libs'时,它改变了eclipse中文件夹的图标,上面有一个小的android符号,就像bin或res文件夹一样.当然,当你构建apk时,lib/armeabi文件夹就在那里(注意它在apk中被命名为'lib',而不是'libs'.这仍然让我困惑.)

我的一个同事(我之前正在研究这个项目)告诉我,在这个位置的某个地方,该文件夹曾经是'lib',但后来在更新版本的android SDK中更改为'libs'.无论哪种方式,刚拿到这个项目,我都没有意识到文件夹应该被命名为'lib',因为它对我来说似乎很好.我准备把头发拉出来了.我要离开这里,希望SOMEONE遇到同样的问题,并设法更快地解决它.