android 静态库和动态库编译

4 篇文章 0 订阅
2 篇文章 0 订阅

android 库的编译依赖于nkd-build,使用之前请先安装NDK。

编译依赖 Android.mk 和 Application.mk 两个文件。

Android.mk(同时编译静态库和动态库):

LOCAL_PATH := $(call my-dir)

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

################################
######### STATIC LIB ###########
################################
include $(CLEAR_VARS)

# 源码路径
CODE1_PATH := ../../code1
CODE2_PATH := ../../code2
CODE3_PATH := ../../code3

# 输出库名
LOCAL_MODULE := hello_android

# 编译平台选项
APP_ABI := armeabi armeabi-v7a x86 mips
LOCAL_CFLAGS := -O3 -Wl,-Bsymbolic
LOCAL_CFLAGS += -ffunction-sections -fdata-sections  # 去无用代码

# CODE1 Source
CODE1_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE1_PATH)/src/*.c))

# CODE2 Source
CODE2_CPP := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE2_PATH)/src/*.cpp))

# CODE3 Source
CODE3_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/*.c))

# 根据平台不同,选择性编译
ifeq ($(APP_ABI), x86)
    CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/X86/*.c))
else
    ifeq ($(APP_ABI), armeabi-v7a)
        CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Neon/*.c))
    else
        ifeq ($(APP_ABI), armeabi)
            CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Neon/*.c))
        else
            ifeq ($(APP_ABI), mips)
                CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Mips/*.c))
            endif
        endif
    endif

endif

LOCAL_SRC_FILES := $(call CODE1_C, $(LOCAL_PATH))
LOCAL_SRC_FILES += $(call CODE2_CPP, $(LOCAL_PATH))
LOCAL_SRC_FILES += $(call CODE3_C, $(LOCAL_PATH))


LOCAL_C_INCLUDES := \
    $(LOCAL_PATH)/$(CODE1_PATH)/Include1 \
    $(LOCAL_PATH)/$(CODE1_PATH)/Include2

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/$(CODE2_PATH)/Include

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/$(CODE3_PATH)/Include

include $(BUILD_STATIC_LIBRARY)


################################
######### SHARED LIB ###########
################################

include $(CLEAR_VARS)

CODE1_PATH := ../../code1
CODE2_PATH := ../../code2
CODE3_PATH := ../../code3

LOCAL_MODULE := hello_android_shared
LOCAL_STATIC_LIBRARIES := hello_android
APP_ABI := armeabi armeabi-v7a x86 mips

LOCAL_CFLAGS := -O3 -Wl,-Bsymbolic
LOCAL_CFLAGS += -ffunction-sections -fdata-sections  # 去无用代码
LOCAL_LDFLAGS := -Wl,--gc-sections

# CODE1 Source
CODE1_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE1_PATH)/src/*.c))

# CODE2 Source
CODE2_CPP := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE2_PATH)/src/*.cpp))

# CODE3 Source
CODE3_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/*.c))

# 根据平台不同,选择性编译
ifeq ($(APP_ABI), x86)
    CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/X86/*.c))
else
    ifeq ($(APP_ABI), armeabi-v7a)
        CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Neon/*.c))
    else
        ifeq ($(APP_ABI), armeabi)
            CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Neon/*.c))
        else
            ifeq ($(APP_ABI), mips)
                CODE3_C += $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE3_PATH)/src/Mips/*.c))
            endif
        endif
    endif

endif

LOCAL_SRC_FILES := $(call CODE1_C, $(LOCAL_PATH))
LOCAL_SRC_FILES += $(call CODE2_CPP, $(LOCAL_PATH))
LOCAL_SRC_FILES += $(call CODE3_C, $(LOCAL_PATH))


LOCAL_C_INCLUDES := \
    $(LOCAL_PATH)/$(CODE1_PATH)/Include1 \
    $(LOCAL_PATH)/$(CODE1_PATH)/Include2

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/$(CODE2_PATH)/Include

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/$(CODE3_PATH)/Include

include $(BUILD_SHARED_LIBRARY)

Application.mk

#APP_MODULES := hello_android_S
APP_OPTIM := release
APP_ABI := armeabi-v7a
APP_BUILD_SCRIPT := Android.mk

编译:

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

windows:%NDK%/ndk-build.cmd -B NDK_PROJECT_PATH=. NDK_APPLICATION_MK=./Application.mk
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值