Android NDK

编译android静态库或动态库

2018-07-06  本文已影响0人  allenyang羊羊

当我们有一份源码需要为android编译出动态库或静态库时,可以在源码目录创建一个build目录,并创建三个文件:Application.mk,一个Android.mk ,一个build.sh来完成编译,这三个文件的内容如下:

Application.mk

此文件主要用于设置以下内容:

1.  设置编译debug库还是release库

2. 指定要编译的芯片平台

APP_PLATFORM := android-14

APP_OPTIM := release

#列出需要编译的芯片平台

APP_ABI := armeabi-v7a

APP_BUILD_SCRIPT := Android.mk

APP_STL := gnustl_static

Android.mk   

完成的工作包括:

1. 自动根据配置的源文件路径搜索所有的源文件去编译

2. 配置编译选项

3. 根据配置,编译出动态库或静态库

LOCAL_PATH := $(call my-dir)

$(info )

$(info ****** Build Library ******)

#如果子项目已经有Android.mk文件,则直接包含进来编译即可。同时把后面的部分注释掉

#include ../common/Android.mk

include $(CLEAR_VARS)

# 源码路径

CODE_PATH := ..

# 指定编译静态库=YES, 动态库=NO

GEN_STATIC=YES

# 输出库名称

LOCAL_MODULE := hello_android

# 编译选项

LOCAL_CFLAGS := -O3 -Wl,-Bsymbolic

LOCAL_CFLAGS += -ffunction-sections -fdata-sections

LOCAL_CPPFLAGS := $(LOCAL_CFLAGS)

#指定源文件的路径,所有包含源文件的目录/子目录都要列出来

SRCDIRS    :=  $(CODE_PATH) \

                $(CODE_PATH)/src

#指定头文件搜索路径

LOCAL_C_INCLUDES := $(SRCDIRS) \

    $(LOCAL_PATH)/$(CODE_PATH)/ \

    $(LOCAL_PATH)/$(CODE_PATH)/src

$(info $(LOCAL_C_INCLUDES))

# CODE Source 递归遍历出SRCDIRS中所有目录下的源文件

CODE_C  := $(foreach x, $(SRCDIRS), $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(x)/*.c)))

CODE_CC  := $(foreach x, $(SRCDIRS), $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(x)/*.cc)))

CODE_CPP := $(foreach x, $(SRCDIRS), $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(x)/*.cpp)))

LOCAL_SRC_FILES := $(call CODE_C, $(LOCAL_PATH))

LOCAL_SRC_FILES += $(call CODE_CC, $(LOCAL_PATH))

LOCAL_SRC_FILES += $(call CODE_CPP, $(LOCAL_PATH))

#当编译动态库时需要指定工程的其他依赖库和库搜索路径

ifeq ($(GEN_STATIC),NO)

#指定库搜索路径

LOCAL_LDLIBS += -L$(LOCAL_PATH)/prebuilt/ -L$(SYSROOT)/usr/lib

#指定依赖的静态库,如果不在库搜索路径里面则需要通过$(LOCAL_PATH)指定绝对路径

#LOCAL_STATIC_LIBRARIES:=$(LOCAL_PATH)/lib/libxxx.a

#指定依赖的动态库

LOCAL_LDLIBS += -llog -lz

endif

#根据配置选择编译静态库或动态库

ifeq ($(GEN_STATIC),YES)

include $(BUILD_STATIC_LIBRARY)

else

include $(BUILD_SHARED_LIBRARY)

endif

build.sh

#!bin/sh

ndk-build -B NDK_PROJECT_PATH=. NDK_APPLICATION_MK=./Application.mk

此时打开终端进入build目录,执行

sh build.sh

万事大吉!

上一篇 下一篇

猜你喜欢

热点阅读