2014-03-28 99 views
1

我有一个Android Eclipse库项目“Lib”,它包含用NDK构建的Java和C代码。我有另一个项目“App”,它依赖于Lib。应用程序还包含Java和C.我的目标是拥有多个类似Eclipse App的项目,每个项目都使用Lib项目。Android Eclipse:如何从另一个项目中引用库项目的NDK库?

App中的Java例程调用库中调用C代码的Java例程。这将编译,链接并在设备上完美运行。

现在我想添加从应用程序中的C代码到Lib中的C代码的调用。我的第一个问题是头文件。我需要包含一个头文件,JNI/LIB-JNI,H,从库项目:

#include "lib-jni.h" 

在应用.c文件。对于这个#包括工作,我相信我需要在App的jni/Android.mk中添加Lib的jni /目录到LOCAL_C_INCLUDES。我不想对此路径进行硬编码,如果可能,我想从Eclipse中获取它。毕竟,我告诉Eclipse,App项目依赖于Lib项目,Eclipse知道如何在两者之间连接Java调用。

我通过将lib-jni.h从lib的jni /目录复制到应用程序的jni /目录中,暂时讨论了第一个问题。现在应用程序的C代码编译,但它不会链接;它会得到一个未定义的。在App的Android.mk中,我需要告诉C链接器与libLib.so链接。我试着在LOCAL_LDLIBS上放置-lLib,但那不起作用。 libLib.so位于Lib/libs/armeabi/libLib.so的Lib项目中。 Eclipse知道将这个.so合并到它为App构建的.apk文件中。

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

  1. 添加库的JNI /目录应用程序的LOCAL_C_INCLUDES
  2. 到libLIb.so引用添加到应用程序的LOCAL_LDLIBS

我在可能的解决方案方面表述了这些问题。我愿意接受任何解决方案。例如,如果使用LOCAL_LDLIBS错误的方法,那么正确的方法是什么?

注意:由于App和11b是在不同时间建立两个单独的Eclipse项目我敢肯定,我不能使用LOCAL_EXPORT_C_INCLUDES在库的Android.mk使库的JNI /目录提供给应用程序的Anroid.mk - 我试着它没有工作。但我准备好接受教育。

回答

0

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

相关问题