2014-03-28 138 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文件夾中,但我不確定它是否可行。

相關問題