-->

多(我和第三方)购买Android NDK本地库(multiple (my and 3rd-part

2019-06-24 00:38发布

我必须使用两个本地库:一个是我自己的,另一种是第三方。 只要我用他们在不同的项目,一切正常。 但是现在我发现了Exception Ljava/lang/UnsatisfiedLinkError

我使用Eclipse。

我发现,如果我把现有的库在库/ armeabi,Eclipse中开始的本机代码的编译和失败。 如果我在命令行重建JNI的一部分,编译成功,但第三方库中消失。 真是愚蠢。

所以,我怎么告诉Eclipse与必须建立一个库一起使用现有的.so库? 该库是独立的。

Answer 1:

NDK的允许与预置的用户库连接,使用PREBUILT_SHARED_LIBRARY变量。

假设你需要链接库是librandom.so,创建一个libs文件夹jni项目文件夹的子文件夹:

mkdir -p jni/libs
cp librandom.so jni/libs

然后,只需创建一个jni/libs/Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := random
LOCAL_SRC_FILES := librandom.so
include $(PREBUILT_SHARED_LIBRARY)

您可以为每个预建库中的部分,全部置于jni/libs

接下来,你只需要包含上述文件到您的JNI / Android.mk把事情的工作。 在NDK的文档,建议本在Android.mk年底完成,而不是中间:

include $(LOCAL_PATH)/libs/Android.mk

但是,你需要的是需要这个库中的模块之前做到这一点。

对于链接,你需要添加以下到一个链接到预建库模块部分。

LOCAL_SHARED_LIBRARIES := random

然后,当你做NDK建造,它会复制这个库到libs/armeabi/构建模块,和之前你去好。

注意:这不会解决所需的标题问题。 你仍然需要添加标题的位置库到变量LOCAL_C_INCLUDES需要它的模块中。



Answer 2:

这是我的时刻完成的。 我不会接受(在计算器意义上的)我自己的(这个)答案beause它是不能令人满意的。

我创建了一个新的项目,并没有复制的所有java文件。 然后,我从旧的项目和第三方库到库/ armeabi复制.so库。

这是可怕的。 但是,它的工作原理。 就目前而言。 最糟糕的是,版本控制鱼雷的袭击。



文章来源: multiple (my and 3rd-party) native libraries in Android NDK