Android应用中有时会使用到第三方的软件包,包括Java包(.jar)和Native包(.so)。jar包即可通过IDE开发环境集成,也可通过编译源码集成。
假如现在开发一个程序HelloWorld,需要用到第三方库,包括helloSDK.jar和libHello.so。
这里主要说下源码环境集成的方式,主要是在该应用的Android.mk文件的引用。
1、将HelloWorld放到Android源码中的packages/apps/下,创建libs目录、libs/armeabi目录,并把helloSDK.jar放在libs/下,libHello.so放到libs/armeabi/下。
2、先把Android.mk文件列出
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libhelloSDK
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := HelloWorld
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libhelloSDK:libs/helloSDK.jar
LOCAL_PREBUILT_LIBS :=libHello:libs/armeabi/libHello.so
LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)
# Use the following include to make our testapk.
include $(callall-makefiles-under,$(LOCAL_PATH))
3、集成jar包
LOCAL_STATIC_JAVA_LIBRARIES:取jar库的别名,可以任意取值。
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:指定prebuilt jar库的规则。格式:“别名:jar文件路径”。注意别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里定义的别名一致,且不含“.jar”。jar文件路径一定是真是的存放第三方jar包的路径。
编译用BUILD_MULTI_PREBUILT。
4、集成.so动态库
LOCAL_PREBUILT_LIBS:指定prebuilt so库的规则,格式:“别名:so文件路径”。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真是的存放第三方so文件的路径。
编译用BUILD_MULTI_PREBUILT。
4.1加入到GRANDFATHERED_USER_MODULES
在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中
GRANDFATHERED_USER_MODULES += \
… \
libBMapApiEngine_v1_3_1
user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。