【问题标题】:Android Eclipse: How to reference library project's NDK library from another project?Android Eclipse:如何从另一个项目中引用库项目的 NDK 库?
【发布时间】: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 文件中。

有没有办法干净地解决这两个问题?

  1. 将Lib的jni/目录添加到App的LOCAL_C_INCLUDES
  2. 将 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


    【解决方案1】:

    我总是将LOCAL_C_INCLUDES 设置为原始库,所以我认为这不是一个坏主意。另一种解决方案是将外部库作为静态库包含在您的 libs 文件夹中,但我不确定它是否会起作用。

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多