android 靜態庫和動態庫編譯
阿新 • • 發佈:2019-01-28
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