美文网首页Android NDK
编译android静态库或动态库

编译android静态库或动态库

作者: allenyang羊羊 | 来源:发表于2018-07-06 16:30 被阅读0次

当我们有一份源码需要为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

万事大吉!

相关文章

  • 编译android静态库或动态库

    当我们有一份源码需要为android编译出动态库或静态库时,可以在源码目录创建一个build目录,并创建三个文件:...

  • 静态库

    静态库 静态库动态库简介 .a 静态库:被编译好的二进制文件 静态库:.a, .framework 动态库: .d...

  • 将ffmpeg集成到Android工程中

    准备工具 Android开发工具AS(需要下载NDK) ffmpeg交叉编译后的动态库或静态库以及头文件如果你不知...

  • 编译FFmpeg静态库(*.a) for Android

    前篇文章Mac平台编译FFmpeg for Android写了如果编译FFmpeg动态库,如果想编译静态库也是非常...

  • iOS静态库及动态库

    2018-06-19 浅析静态库链接原理编译原理以及什么是静态库和动态库 转之: iOS 静态库和动态库(库详解)...

  • Ndk生成so和a库,然后主项目进行调用

    在 NDK 开发中引入第三方静态库和动态库 静态库和动态库 静态库 静态库文件后缀一般为 .a ,利用静态库编译成...

  • Xcode7中创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • 创建静态库

    一、静态库和动态库的区别: 静态库和动态库是相对编译期和运行期的,静态库以 .a 和 .framework 形式存...

  • iOS开发-动态库加载(实时模块更新)

    动态库和静态库 静态库和动态库是相对编译期和运行期:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改...

  • iOS 静态库Framework开发(包含静态库,bundle使

    静态库和动态库 静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要...

网友评论

    本文标题:编译android静态库或动态库

    本文链接:https://www.haomeiwen.com/subject/dmovuftx.html