Android.mk添加第三方jar包

最近引入第三方的jar包進工程,發現光紅色的兩條並不起做用,加入include $(BUILD_MULTI_PREBUILT) 才起做用,並且順序很重要,在這裏把我參考的兩個例子都列出來。html

如下爲引用例子:java

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------android

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)app

LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4jsocket

LOCAL_MODULE_TAGS := optionalui

LOCAL_SRC_FILES := $(call all-subdir-java-files)this

LOCAL_PACKAGE_NAME := testspa


LOCAL_CERTIFICATE := platformcode

include $(BUILD_PACKAGE)orm

##################################################
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
    jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
    logging:lib/commons-logging.jar \
    jackson-core:lib/jackson-core-asl-1.6.2.jar \
    javatar:lib/javatar-2.5.jar \
    log4j:lib/log4j-1.2.15.jar

include $(BUILD_MULTI_PREBUILT)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

 

以上是個人一個項目中所須要的第三方jar包,主要參考了Android源碼中的Calculator應用,該應用也引用了一個第三方的jar包arity-2.1.2.jar。

須要注意的是,當你要引用的jar包不止一個時,有兩個關鍵的地方須要注意的。

LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j

    jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
    logging:lib/commons-logging.jar \
    jackson-core:lib/jackson-core-asl-1.6.2.jar \
    javatar:lib/javatar-2.5.jar \
    log4j:lib/log4j-1.2.15.jar

xsocket jackson-mapper logging jackson-core javatar log4j這幾個只是名字,能夠隨便取。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES後面纔是真正其做用的地方。如:

xsocket:lib/xSocket-2.8.14.jar 引用的是lib目錄中的xSocket-2.8.14.jar。

還要注意的是 := 不要寫成了+=了哦。

 

附:編寫各類類型的Android.mk,出處我忘記了,是之前瀏覽是拷貝下來的。若是侵犯了做者的權益,煩請聯繫我hopetribe@gmail.com。我及時刪除。

 

1、編譯一個簡單的APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)

2、編譯一個依賴靜態.jar文件的APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
注:LOCAL_STATIC_JAVA_LIBRARIES 後面應是你的APK程序所須要的JAVA庫的JAR文件名。

3、編譯一個須要platform key簽名的APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
注:LOCAL_CERTIFICATE 後面應該是簽名文件的文件名

4、編譯一個須要特殊vendor key簽名的APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)

5、裝載一個普通的第三方APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed.
LOCAL_MODULE := LocalModuleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT) 

6、裝載須要.so(動態庫)的第三方apk

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := baiduinput_android_v1.1_1000e
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)

#################################################################
####### copy the library to /system/lib #########################
#################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := libinputcore.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_SRC_FILES := lib/$(LOCAL_MODULE)
OVERRIDE_BUILD_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)
include $(BUILD_PREBUILT)

7、編譯一個靜態java庫

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
注:LOCAL_JAVA_LIBRARIES表示生成的java庫的jar文件名。

來源:http://www.cnblogs.com/hopetribe/archive/2012/04/23/2467060.html

include $(CLEAR_VARS)


LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := ta:libs/TA4AIDL.jar
include $(BUILD_MULTI_PREBUILT)


 

下面的代碼能夠加到任一個文件中:
添加共享庫:
LOCAL_MODULE := libffmpeg #庫的名字
LOCAL_MODULE_TAGS := optional   #系統內有效,你能夠試一下不加這一行就能夠看到出錯提示信息。
LOCAL_PREBUILT_LIBS := libffmpeg.so #庫的路徑。
添加靜態庫:
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_PREBUILT_LIBS := libavcodec.a
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)

 

靜態庫和動態庫是對應的,靜態庫是在連接時使用,動態庫是在運行時使用,使用方法:

在要用到對應庫的模塊的Android.mk文件中加入相似於下面的內容:

靜態庫(連接時用,它會被複制到out/target/product/generic/obj/STATIC_LIBRARIES/libavcodec_intermediates/目錄下):

LOCAL_WHOLE_STATIC_LIBRARIES += \
    libavcodec  #這個是模塊名(LOCAL_MODULE)
動態庫(運行時用,它會被複制到/system/lib/目錄下。):
LOCAL_SHARED_LIBRARIES += \
        libffmpeg

 

include $(call all-makefiles-under,$(LOCAL_PATH)) #這句上調用子目錄下的頗有Android.mk

來源:http://hi.baidu.com/2400xiaobing/item/ffa78cd51f76d81521e25085

LOCAL_STATIC_JAVA_LIBRARIES := ta

include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := ta:libs/TA4AIDL.jar include $(BUILD_MULTI_PREBUILT)

相關文章
相關標籤/搜索