在android实际的开发过程中,经过需要使用到第三方的资源,第三方提供的资源包括apk文件,so动态库文件,.a的静态库文件。
而第三方提供的这些资源,经常需要集成到Android的原生工程中。
集成so动态库,Android.mk文件书写如下:
#build lib so
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := libexample.so
LOCAL_MODULE := libexample.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)
上面集成so动态库有个弊端,就是最终生成的so为:libexample.so.so,更好的方式是下面的,编译生成的就是libexample.so:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_LIBS := libexample.so
include $(BUILD_MULTI_PREBUILT)
集成.a静态库,Android.mk文件书写如下:
#build static lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := libexample.a
LOCAL_BUILT_MODULE_STEM := libexample.a
LOCAL_MODULE_SUFFIX := lib
LOCAL_MODULE := libexample
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
include $(BUILD_PREBUILT)
动态库默认编译输出/system/lib目录下。
动态库链接时,在Android.mk中添加:
LOCAL_SHARED_LIBRARIES := libexample.so
静态库调用,在Android.mk中添加:
LOCAL_STATIC_LIBRARIES := libexample.a
集成第三方apk,且apk中有jni的so,Android.mk书写如下:
LOCAL_PATH := $(call my-dir)
MY_ABI := armeabi
include $(CLEAR_VARS)
LOCAL_MODULE := example
LOCAL_SRC_FILES := example.apk
LOCAL_PREBUILT_JNI_LIBS := \
@lib/$(MY_ABI)/libBaiduMap.so \
@lib/$(MY_ABI)/libWeixin.so
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
上面Android.mk的例子在实际Android的项目中,可以正常使用。