Android Eclipse:如何从另一个项目引用库项目的NDK库?

时间:2014-03-28 17:05:58

标签: android eclipse android-ndk libraries

我有一个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工作,我相信我需要在App的jni / Android.mk中将Lib的jni /目录添加到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 /目录添加到应用程序的LOCAL_C_INCLUDES
  2. 向app' s LOCAL_LDLIBS
  3. 添加对libLIb.so的引用

    我从可能的解决方案的角度讲述了这些问题。我对任何解决方案持开放态度。例如,如果使用LOCAL_LDLIBS错误的方法,那么正确的方法是什么?

    注意:因为App和Lib是在不同时间构建的两个独立的Eclipse项目,所以我很确定我不能在Lib的Android.mk中使用LOCAL_EXPORT_C_INCLUDES来制作Lib& #39; s jni /目录可用于App的Anroid.mk - 我试过它没有用。但我准备接受教育。

1 个答案:

答案 0 :(得分:0)

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