我已經閱讀了很多關於如何使用Android.mk系統共享預構建庫的文章。該解決方案可以歸結爲兩個步驟:Android NDK:如何構建並使用預構建的庫
- 與已建庫的目錄使用*包括$(PREBUILT_SHARED_LIBRARY)*
- 項目消耗庫使用* LOCAL_SHARED_LIBRARIES *
(你可以用「STATIC」替代「SHARED」來構建和使用.a而不是.so)
我想要做的是添加一個步驟0:從源代碼構建庫。如果我更改了一個有助於庫的源文件,我希望Android.mk系統按順序執行步驟0,1和2。
我已經在Eclipse/ADT兩個項目:
- MyApp的 - 使用在MyLibrary
- 在MyLibrary - 包含源文件庫
我問這裏的問題集中在MyLibrary項目。這裏是Android.mk用於在MyLibrary:
LOCAL_PATH := $(call my-dir)
# step 0: build my library
include $(CLEAR_VARS)
LOCAL_MODULE := mylibrary
LOCAL_LDLIBS := -llog
LOCAL_SRC_FILES := libsrc1.c libsrc2.c
include $(BUILD_SHARED_LIBRARY)
# step 1: export my library (PREBUILT_SHARED_LIBRARY):
include $(CLEAR_VARS)
LOCAL_MODULE := mylibrary-prebuilt
LOCAL_SRC_FILES := ../libs/$(TARGET_ARCH_ABI)/libmylibrary.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY)
如果我做了項目 - >乾淨...然後項目 - >在這個項目建立項目我得到的錯誤:
錯誤:jni/Android.mk:mylibrary-prebuilt:LOCAL_SRC_FILES指向缺少的文件。
乾淨刪除.so,我猜測PREBUILT_SHARED_LIBRARY在BUILD_SHARED_LIBRARY重建庫並複製它(即使步驟的順序正確)之前檢測到缺少.so。
如果我註釋掉步驟1並構建,libmylibrary.so被正確構建並複製到libs/armeabi/libmylibrary.so。如果我爲非註釋第2步,做一個項目 - >構建項目,那就是沒有做一個乾淨的第一,我得到這些警告和錯誤:
warning: overriding commands for target `obj/local/armeabi/libmylibrary.so'
warning: ignoring old commands for target `obj/local/armeabi/libmylibrary.so'
warning: overriding commands for target `libs/armeabi/libmylibrary.so'
warning: ignoring old commands for target `libs/armeabi/libmylibrary.so'
make: *** No rule to make target `jni/../libs/armeabi/libmylibrary.so', needed by `obj/local/armeabi/libmylibrary.so'. Stop.
我想我明白這些錯誤,但我不看到一種方法來實現我想要的。
我錯過了什麼?
感謝您的評論。我一直在思考我的目標,並得出結論是錯誤的。我想要第0步,因爲圖書館正在開發中。我一直在重建它。所以我可能不想要一個預建的圖書館。 – Sam