在Linux環境下Android開發過程中,經常會用到第三方的靜態庫、動態庫、jar包來開發自己的應用,那麼,如何編寫這類應用的makefile呢?
首先,帶有動態庫的makefile編寫:
12345678910 |
include $(CLEAR_VARS)LOCAL_MODULE := libfreewrite-jni.so LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)LOCAL_SRC_FILES := libs/$(LOCAL_MODULE)OVERRIDE_BUILD_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES) include $(BUILD_PREBUILT) |
將上面的代碼添加在應用最外層的Android.mk檔案最後面即可,其它地方也可,但是注意添加過程中不要破壞原有代碼的結構,例如將下麵包含jar包的代碼隨意添加到本代碼塊中間是不對的,應該放在該代碼塊的前面後者後面。
上面要添加的動態庫的名稱為:libfreewrite-jni.so
所在的路徑為:/libs/libfreewrite-jni.so
第二,jar包的添加:
123456 |
include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libvDm:libs/com.redbend.vdm.jar \ libvDmComm:libs/com.redbend.vdm.comm.jar \ libvDmDdl:libs/com.redbend.vdm.ddl.jar \ libvDmFumo:libs/com.redbend.vdm.fumo.jarinclude $(BUILD_MULTI_PREBUILT) |
以上代碼中,形如“libvDm:”的作用應該類似與程式設計語言中的引用,或者說叫重新命名;另外,感覺jar包的添加,貌似和靜態庫是一樣的,或者jar包本身就類似於靜態庫吧?有點小疑問……
第三,靜態庫的添加:
下面的Android.mk完整程式是編譯產生一個.so
1234567891011121314151617181920212223242526 |
LOCAL_PATH := $(call my-dir) ### shared library include $(CLEAR_VARS) #需要編譯的本地源檔案LOCAL_SRC_FILES := \hisense/com_hisense_inputmethod_CskSmartEngDecoderService.cpp LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)LOCAL_LDLIBS += -lpthread#將要產生.so動態庫的名稱LOCAL_MODULE := libjni_csksmarteng_hisenseimeLOCAL_PRELINK_MODULE := falseLOCAL_SHARED_LIBRARIES := libcutils libutils #包含靜態庫libhisensecsk2smartengarmLOCAL_STATIC_LIBRARIES := libhisensecsk2smartengarm #編譯產生一個.so動態庫include $(BUILD_SHARED_LIBRARY) #指示Static Libraries所在的目錄為/lib/libhisensecsk2smartengarm#規則由lib/Android.mk檔案定義include $(LOCAL_PATH)/lib/Android.mk |
另附,靜態庫所在檔案夾內的Android.mk檔案:
123 |
LOCAL_PATH := $(my-dir) $(call add-prebuilt-files, STATIC_LIBRARIES, libhisensecsk2smartengarm.a) |
原文地址
http://xiaohang.org/2011/04/