参考:http://blog.csdn.net/qhc88/article/details/51066628
预制有源码和无源码32 , 64 bit so bin 通过LOCAL_MODULE_TARGET_ARCHS 、 LOCAL_MULTILIB 控制
LOCAL_PATH := $(call my-dir)
sources := \
tvini.c \
mmap.c \
spi.c
cincludes := \
$(TARGET_OUT_HEADERS) \
$(TARGET_UTOPIA_LIBS_DIR)/include \
external/iniparser
# libmutils.so
# ==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libmutils
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(sources)
LOCAL_C_INCLUDES := $(cincludes)
LOCAL_CFLAGS := -DMSOS_TYPE_LINUX-DENABLE_LOGGER
LOCAL_SHARED_LIBRARIES := liblog libutopialibiniparser libcutils
WEWWW
include $(BUILD_SHARED_LIBRARY)
对于有源码,只编译32 lib的so
LOCAL_PATH := $(call my-dir)
sources := \
tvini.c \
mmap.c \
spi.c
cincludes := \
$(TARGET_OUT_HEADERS) \
$(TARGET_UTOPIA_LIBS_DIR)/include \
external/iniparser
# libmutils.so
#==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libmutils
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(sources)
LOCAL_C_INCLUDES := $(cincludes)
LOCAL_CFLAGS := -DMSOS_TYPE_LINUX-DENABLE_LOGGER
LOCAL_SHARED_LIBRARIES := liblog libutopialibiniparser libcutils
LOCAL_32_BIT_ONLY := true
include $(BUILD_SHARED_LIBRARY)
或者采用下面的这种方法
LOCAL_PATH := $(call my-dir)
sources := \
tvini.c \
mmap.c \
spi.c
cincludes := \
$(TARGET_OUT_HEADERS) \
$(TARGET_UTOPIA_LIBS_DIR)/include \
external/iniparser
# libmutils.so
# ==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libmutils
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(sources)
LOCAL_C_INCLUDES := $(cincludes)
LOCAL_CFLAGS := -DMSOS_TYPE_LINUX -DENABLE_LOGGER
LOCAL_SHARED_LIBRARIES := liblog libutopialibiniparser libcutils
LOCAL_MODULE_TARGET_ARCH:= arm
LOCAL_MULTILIB := 32
include $(BUILD_SHARED_LIBRARY)
对于有源码,但是只需要编译64 bit的so
LOCAL_PATH := $(call my-dir)
sources := \
tvini.c \
mmap.c \
spi.c
cincludes := \
$(TARGET_OUT_HEADERS) \
$(TARGET_UTOPIA_LIBS_DIR)/include \
external/iniparser
# libmutils.so
#==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libmutils
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(sources)
LOCAL_C_INCLUDES := $(cincludes)
LOCAL_CFLAGS := -DMSOS_TYPE_LINUX-DENABLE_LOGGER
LOCAL_SHARED_LIBRARIES := liblog libutopialibiniparser libcutils
LOCAL_MODULE_TARGET_ARCH:= arm64
LOCAL_MULTILIB := 64
include $(BUILD_SHARED_LIBRARY)
下面在说一下没有源码,预制so的方式
对于有32 跟64 bit so的东西,都想预制进入可以采用:
## libutopia.so
##==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libutopia
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_arm :=lib/libutopia.so
LOCAL_SRC_FILES_arm64 :=lib64/libutopia.so
LOCAL_MODULE_TARGET_ARCHS:= arm arm64
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)
如果只预制32 bit的so
## libutopia.so
##==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libutopia
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_arm :=lib/libutopia.so
LOCAL_MODULE_TARGET_ARCHS:= arm
LOCAL_MULTILIB := 32
include $(BUILD_PREBUILT)
如果只想预制64 bit的so
## libutopia.so
##==============================================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libutopia
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_arm64 :=lib64/libutopia.so
LOCAL_MODULE_TARGET_ARCHS:= arm64
LOCAL_MULTILIB := 64
include $(BUILD_PREBUILT)
预置 apk,请参考下面的写法预置 apk
1,预置system app下的apk
define PREBUILT_system_apps_template
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $$(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
endef
2,预置system下的apk, force apk 跑 32 bit, libbluetooth_jni部分是一个32 bit的lib
define PREBUILT_system_apps_template_32only
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $$(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MULTILIB := 32
LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
include $(BUILD_PREBUILT)
endef
3,预置system app, 不用系统签名, 用预签名
definePREBUILT_system_apps_template_32only_presigned
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MULTILIB := 32
LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
include $(BUILD_PREBUILT)
endef
4,预置system vendor apk
define PREBUILT_vendor_apps_template
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH:= $(TARGET_OUT)/vendor/app
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(1).apk
include $(BUILD_PREBUILT)
endef
5,预置system vendor apk, 并force 32 bit
define PREBUILT_vendor_apps_template_32only
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/app
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(1).apk
LOCAL_MULTILIB := 32
LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
include $(BUILD_PREBUILT)
endef
6,预置data app下的apk,使用系统签名
define PREBUILT_data_apps_template
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(1).apk
include $(BUILD_PREBUILT)
endef
7,预置data app下的apk,使用预签名
definePREBUILT_data_apps_presigned_template
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := $(1)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := $(1).apk
include $(BUILD_PREBUILT)
endef
LOCAL_MODULE_TARGET_ARCH
设置成一个架构的列表,只有被构建的架构在列表中才会被构建系统添加进入当前模块。
LOCAL_MODULE_UNSUPPORTED_TARGET_ARCH
LOCAL_MODULE_TARGET_ARCH 的对立选项。
只有被构建的架构不在列表中才会被构建系统添加进入当前模块。
DEX预选择
LOCAL_MULTILIB := both
为APK预置32位和64位的odex ;