您的位置:首页 > 移动开发 > Android开发

android 原生工程中集成第三方so动态库和.a静态库和apk

2017-09-09 16:20 561 查看
在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的项目中,可以正常使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息