android 静态库和动态库编译

来源:互联网 发布:windows 7怎么更改只读 编辑:程序博客网 时间:2024/05/17 17:54

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 := ../../code1CODE2_PATH := ../../code2CODE3_PATH := ../../code3# 输出库名LOCAL_MODULE := hello_android# 编译平台选项APP_ABI := armeabi armeabi-v7a x86 mipsLOCAL_CFLAGS := -O3 -Wl,-BsymbolicLOCAL_CFLAGS += -ffunction-sections -fdata-sections  # 去无用代码# CODE1 SourceCODE1_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE1_PATH)/src/*.c))# CODE2 SourceCODE2_CPP := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE2_PATH)/src/*.cpp))# CODE3 SourceCODE3_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    endifendifLOCAL_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)/Include2LOCAL_C_INCLUDES += \    $(LOCAL_PATH)/$(CODE2_PATH)/IncludeLOCAL_C_INCLUDES += \    $(LOCAL_PATH)/$(CODE3_PATH)/Includeinclude $(BUILD_STATIC_LIBRARY)######################################### SHARED LIB ###########################################include $(CLEAR_VARS)CODE1_PATH := ../../code1CODE2_PATH := ../../code2CODE3_PATH := ../../code3LOCAL_MODULE := hello_android_sharedLOCAL_STATIC_LIBRARIES := hello_androidAPP_ABI := armeabi armeabi-v7a x86 mipsLOCAL_CFLAGS := -O3 -Wl,-BsymbolicLOCAL_CFLAGS += -ffunction-sections -fdata-sections  # 去无用代码LOCAL_LDFLAGS := -Wl,--gc-sections# CODE1 SourceCODE1_C := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE1_PATH)/src/*.c))# CODE2 SourceCODE2_CPP := $(subst $(LOCAL_PATH)/ ,, $(wildcard $(LOCAL_PATH)/$(CODE2_PATH)/src/*.cpp))# CODE3 SourceCODE3_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    endifendifLOCAL_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)/Include2LOCAL_C_INCLUDES += \    $(LOCAL_PATH)/$(CODE2_PATH)/IncludeLOCAL_C_INCLUDES += \    $(LOCAL_PATH)/$(CODE3_PATH)/Includeinclude $(BUILD_SHARED_LIBRARY)

Application.mk

#APP_MODULES := hello_android_SAPP_OPTIM := releaseAPP_ABI := armeabi-v7aAPP_BUILD_SCRIPT := Android.mk

编译:

linux:ndk-build -B NDK_PROJECT_PATH=. NDK_APPLICATION_MK=./Application.mkwindows:%NDK%/ndk-build.cmd -B NDK_PROJECT_PATH=. NDK_APPLICATION_MK=./Application.mk
0 0
原创粉丝点击