我有一個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文件中。
有沒有辦法乾淨地解決這兩個問題?
- 添加庫的JNI /目錄應用程序的
LOCAL_C_INCLUDES
- 到libLIb.so引用添加到應用程序的
LOCAL_LDLIBS
我在可能的解決方案方面表述了這些問題。我願意接受任何解決方案。例如,如果使用LOCAL_LDLIBS
錯誤的方法,那麼正確的方法是什麼?
注意:由於App和11b是在不同時間建立兩個單獨的Eclipse項目我敢肯定,我不能使用LOCAL_EXPORT_C_INCLUDES
在庫的Android.mk使庫的JNI /目錄提供給應用程序的Anroid.mk - 我試着它沒有工作。但我準備好接受教育。