gpt4 book ai didi

android - 如何从 Android 应用程序加载 jar 中的 native 共享对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:53 25 4
gpt4 key购买 nike

我有一个共享对象,我称之为“libFoo.so”,是针对 NDK 编译的。我有一个 java 项目(我称它为“jarlib”),它通过调用

使用该共享对象
System.loadLibrary("Foo");

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

我可以使用 jarlib,以及来自 Unity android 应用程序的共享对象,共享对象位于 ./lib/armeabi/libFoo.so 中,它会加载所有内容。

我正在尝试在我的非统一 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

有了这个,如果它在 ./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.

我不确定我缺少什么组合,但我确定它可以完成,我只是不知道该怎么做!

最佳答案

嗯!事实证明,它是如此之小,以至于让我头痛了八个小时。

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

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

记住我是怎么说的(在 android 应用程序端):

./lib/libFoo.so
-and-
./lib/armeabi/libFoo.so

事实证明,我需要做的是将它放在类似的路径中。哦,太相似了。

./libs/armeabi/libFoo.so

是的。库。用s

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

我的一位同事(在我之前就在做这个项目)告诉我,在某个地方,该文件夹曾经是“lib”,但在后来的版本中被更改为“libs”安卓开发工具包。无论哪种方式,刚接手这个项目,我都没有意识到该文件夹​​应该命名为“lib”,因为我觉得这很好。我正准备拔头发。我把它留在这里,希望有人遇到我遇到的同样问题,并设法更快地解决它。

关于android - 如何从 Android 应用程序加载 jar 中的 native 共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com