好的,現在我看到您的編輯,這使得回答具體問題成爲可能。
您必須如果你想使用Android NDK建立自己的本地庫/ IE具有至少一個Android.mk
文件爲您的應用程序。雖然這不是要求。可以通過Cmake構建它,或者使用「傳統」構建文件或「MS Visual Studio插件」或任何其他方式構建「獨立工具鏈」。這是重要的結果。結果是一個用仿生運行時兼容編譯器構建的共享對象。
這讓古德意義,把庫${project_root}/libs/armeabi/
目錄(ARM V6兼容的設備,其它的子目錄用於x86,MIPS,ARM公司V7A)允許APK建設者正確包裝它,允許應用程序安裝程序解包的正確版本(與設備處理器兼容)轉換爲設備上的/data/data/${package_name}/lib
目錄,最後能夠使用System.loadLibrary(short_name)
從Java中使用它。但是也可以以不同的方式打包so
文件,手動解包並從設備文件系統上的任何地方加載它(前提是您的應用程序有權寫入和讀取此文件)。
但是,如果我們過濾出異國情況,那麼在${project_root}/jni
目錄中有一個Android.mk會更加舒適。根據ndk-build
命令,每個庫都是一個單獨的MODULE,但所有這三個都可以在一個Android.mk文件中定義。另一方面,如果你的圖書館是孤立的(例如來自不同的第三方),你可能會更喜歡創建三個Android.mk文件。幸運的是,ndk-build
不過是gnu make的一個包裝,Android.mk中的簡單include
語句與任何其他makefile中的語句一樣。
總之,你的情況可能是由一個簡單的Applications/MyApplication/ [Application]/jni/Android.mk
文件覆蓋:
include ../../Libraries/libOne/Android.mk
include ../../Libraries/libTwo/Android.mk
include ../../Libraries/libThree/Android.mk
我不知道你的依賴有libOne和libTwo之間什麼,但對於libOne文件Libraries/libOne/Android.mk
看起來像
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
和Libraries/libThree/Android.mk
LOCAL_PATH = $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
您應該從Applications/MyApplication/ [Application]
目錄運行ndk-build
- 無論是從命令提示符還是通過Eclipse ADT插件。
更新同樣可以由一個Android.mk
文件jni
目錄表示:
LOCAL_PATH = ../../Libraries/libOne
include $(CLEAR_VARS)
LOCAL_MODULE := libOne
LOCAL_SRC_FILES := first.c
include $(BUILD_STATIC_LIBRARY)
LOCAL_PATH = ../../Libraries/libThree
include $(CLEAR_VARS)
LOCAL_MODULE := libThree
LOCAL_SRC_FILES := third.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libOne $(LOCAL_PATH)/../libTwo
LOCAL_STATIC_LIBRARIES := libOne libTwo
include $(BUILD_SHARED_LIBRARY)
你可以分享你的Android.mk?目前還不清楚你如何設置你的項目。 – 2013-02-19 14:04:36
@AlexCohn我還沒有工作的Android.mk,那就是問題所在。我正在尋找一個描述如何構建所有三個庫並將它們從主應用程序鏈接到一起的答案。 – 2013-02-19 20:50:59
我知道你還沒有工作的Android.mk,但你還沒有工作,不是嗎? – 2013-02-20 12:59:06