android NDK :使用预编译第三方库

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处,向分享精神致敬。 https://blog.csdn.net/qilvmilv/article/details/50532300
预编译第三方库通常基于两个目的,一个是提供该库者并不想开源代码,二是开发者可以加快自个项目构建。
下面是一个使用G726 codec编码库的demo。
1.编译G726 codec,编译G726 。将G726相关code copy到编译目录,写好mk文件。
LOCAL_PATH := $(call my-dir)

### Glue for wz g726 codec ###
include $(CLEAR_VARS)
LOCAL_MODULE := wz_g726_codec

G726_PATH := $(LOCAL_PATH)/sources

# g726
LOCAL_C_INCLUDES += $(G726_PATH)/
G726_FILES := $(wildcard $(G726_PATH)/*.c)
LOCAL_SRC_FILES += $(G726_FILES:$(LOCAL_PATH)/%=%) 

include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)

生成产物:libwz_g726_codec.so

2.将产物copy到使用该第三方库的目录下,如下图所示:

假设TestAndroidMK.cpp中引用,编写同级目录android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libwz_g726_codec-pre
LOCAL_SRC_FILES := libwz_g726_codec.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include  //导出第三方库相应的头文件,当编译TestAndroidMK时,判断依赖libwz_g726_codec-pre,则会自动加入该变量进行编译
include $(PREBUILT_SHARED_LIBRARY) //编译为动态共享库,亦可编译成静态共享库


#LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := TestAndroidMK
LOCAL_SRC_FILES := TestAndroidMK.cpp
LOCAL_LDLIBS    := -llog
LOCAL_SHARED_LIBRARIES  := libwz_g726_codec-pre
include $(BUILD_SHARED_LIBRARY)

3.修改TestAndroidMK.cpp,引用头文件
extern "C" {
#include <g72x.h>
}

由于g726相关code为c文件,在c++环境extern关键字引用其头文件

OK,编译,我们会发现在libs/Target_ABI/目录下生成libwz_g726_codec.so和可以引用libwz_g726_codec.so内容的libTestAndroidMK.so两个库,
well done!

参考:http://www.cnblogs.com/qq78292959/archive/2011/11/02/2232962.html

猜你喜欢

转载自blog.csdn.net/qilvmilv/article/details/50532300
今日推荐