【发布时间】:2014-03-28 17:05:57
【问题描述】:
我有一个 Android Eclipse 库项目“Lib”,其中包含使用 NDK 构建的 Java 和 C 代码。我有另一个项目“App”,它依赖于 Lib。 App 还包含 Java 和 C。我的目标是拥有多个类似 Eclipse App 的项目,每个项目都使用 Lib 项目。
App 中的 Java 例程调用 Lib 中的 Java 例程,该例程调用 Lib 中的 C 代码。这可以在设备上完美地编译、链接和运行。
现在我想将 App 中的 C 代码调用添加到 Lib 中的 C 代码。我的第一个问题是头文件。我需要包含来自 Lib 项目的头文件 jni/lib-jni,h:
#include "lib-jni.h"
在 App 中的 .c 文件中。为了让这个#include 工作,我相信我需要将Lib 的jni/ 目录添加到App 的jni/Android.mk 中的LOCAL_C_INCLUDES。我不想硬编码这条路径,如果可能的话,我想从 Eclipse 中获取它。毕竟,我已经告诉 Eclipse App 项目依赖于 Lib 项目,Eclipse 知道如何连接两者之间的 Java 调用。
我暂时解决了第一个问题,将 lib-jni.h 从 Lib 的 jni/ 目录复制到 App 的 jni/ 目录。现在App的C代码可以编译,但是不会链接;它得到一个未定义的。在 App 的 Android.mk 中,我需要告诉 C 链接器链接到 libLib.so。我尝试将 -lLib 放在 LOCAL_LDLIBS 上,但这没有用。 libLib.so 位于 Lib/libs/armeabi/libLib.so 的 Lib 项目中。 Eclipse 知道将这个 .so 合并到它为 App 构建的 .apk 文件中。
有没有办法干净地解决这两个问题?
- 将Lib的jni/目录添加到App的
LOCAL_C_INCLUDES - 将 libLIb.so 的引用添加到 App 的
LOCAL_LDLIBS
我用可能的解决方案来表述这些问题。我愿意接受任何解决方案。例如,如果使用LOCAL_LDLIBS 走错了路,那么正确的路是什么?
注意:因为 App 和 Lib 是在不同时间构建的两个独立 Eclipse 项目,我很确定我不能在 Lib 的 Android.mk 中使用 LOCAL_EXPORT_C_INCLUDES 来使 Lib 的 jni/ 目录对 App 可用Anroid.mk - 我试过没有用。但我已经准备好接受教育了。
【问题讨论】:
标签: android eclipse android-ndk libraries