文章目录
definition
all-subdir-makefiles
# include all subdir Android.mk
include $(call all-subdir-makefiles)
all-makefiles-under
include $(call all-makefiles-under, $(LOCAL_PATH))
variable
ANDROID_BUILD_TOP
after run lunch command, it will add `ANDROID_BUILD_TOP` var to env.
It can references by $(ANDROID_BUILD_TOP) in Android.mk
BUILD_EXECUTABLE
config.mk:124:BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
# include executable.mk to build excute binary in Android.mk
include $(BUILD_EXECUTABLE)
BUILD_JAVA_LIBRARY 与 BUILD_STATIC_JAVA_LIBRARY 的区别
- BUILD_JAVA_LIBRARY 编译出来的jar包,里面是DEX格式的文件
- BUILD_STATIC_JAVA_LIBRARY 编译出来的jar包,里面每个java文件对应的class文件都单独存在,每个java文件里面用到的变量都被静态编译到了class内部,这种格式的jar包可以在Eclipse里面导入并正常使用
BUILD_STATIC_LIBRARY
prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-ar crsPD out/target/product/sdm660_64/obj_arm/STATIC_LIBRARIES/libocam_asd_intermediates/libocam_asd.a out/target/product/sdm660_64/obj_arm/STATIC_LIBRARIES/libocam_asd_intermediates/ocam_asd.o
BUILD_STATIC_JAVA_LIBRARY
ignores LOCAL_REQUIRED_MODULES value
BUILD_PREBUILT shared library
LOCAL_PATH := $(call my-dir)
# compile 64-bit shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libgnustl_shared
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES := mtk/armeabi-v7a/libgnustl_shared.so
LOCAL_MODULE_TAGS := optional eng
include $(BUILD_PREBUILT)
# compile 32-bit shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libgnustl_shared
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_32 := mtk/armeabi-v7a/libgnustl_shared.so
LOCAL_MULTILIB := 32
LOCAL_MODULE_TAGS := optional eng
include $(BUILD_PREBUILT)
# compile 64-bit shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libsysopt_api
LOCAL_SRC_FILES := libsysopt_api.so
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_SUFFIX := .so
LOCAL_MULTILIB := 64
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib64
include $(BUILD_PREBUILT)
# both 32-bit and 64-bit arch
# must specify LOCAL_SRC_FILES_32 and LOCAL_SRC_FILES_64 variable
# or you will get build error
include $(CLEAR_VARS)
LOCAL_MODULE := libstfaceunlock
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_32 := mtk/armeabi-v7a/libstfaceunlock.so
LOCAL_SRC_FILES_64 := mtk/arm64-v8a/libstfaceunlock.so
LOCAL_MULTILIB := both
LOCAL_MODULE_TAGS := optional eng
include $(BUILD_PREBUILT)
COMMON_GLOBAL_CFLAGS
COMMON_RELEASE_CFLAGS
# in build/core/config.mk
COMMON_GLOBAL_CFLAGS:= -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith
COMMON_RELEASE_CFLAGS:= -DNDEBUG -UDEBUG
DEBUG_OUT_DIR
envsetup.mk:320:DEBUG_OUT_DIR := $(OUT_DIR)/debug
HOST_2ND_ARCH_VAR_PREFIX
# envsetup.mk:314
HOST_2ND_ARCH_VAR_PREFIX := 2ND_
# envsetup.mk:375
TARGET_2ND_ARCH_VAR_PREFIX := $(HOST_2ND_ARCH_VAR_PREFIX)
LOCAL_BUILT_MODULE_STEM
# save .so and .so.toc to out/target/product/sdm660_64/obj/lib/
# if not specify it, it will not save to obj/lib diretory
LOCAL_BUILT_MODULE_STEM = $(LOCAL_MODULE).so
LOCAL_C_INCLUDES
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
LOCAL_CPPFLAGS
LOCAL_CPPFLAGS := -std=c++11 -fexceptions \
-fPIC -Wno-non-virtual-dtor -Wno-pessimizing-move
LOCAL_EXPORT_C_INCLUDES
If a module adds the paths to LOCAL_EXPORT_C_INCLUDES
, these paths will be added to LOCAL_C_INCLUDES
definition of another module which uses this one with LOCAL_STATIC_LIBRARIES
or LOCAL_SHARED_LIBRARIES
.
LOCAL_INTERMEDIATE_SOURCES
LOCAL_JNI_SHARED_LIBRARIES
LOCAL_JNI_SHARED_LIBRARIES_ABI
LOCAL_JNI_SHARED_LIBRARIES 变量主要是用在JNI的编译中,如果Java代码中引用JNI共享库*.so,此变量就是共享库的名字。
LOCAL_JNI_SHARED_LIBRARIES := libxxx
在编译的时候,NDK自动会把这个libxxx打包进apk; 放在youapk/lib/目录下
in core/package.mk
# Convert LOCAL_JNI_SHARED_LIBRARIES to LOCAL_REQUIRED_MODULES in full build,
# for preloaded apks don't like embedded jni libraries.
ifndef TARGET_BUILD_APPS
ifdef LOCAL_JNI_SHARED_LIBRARIES
LOCAL_REQUIRED_MODULES += $(LOCAL_JNI_SHARED_LIBRARIES)
LOCAL_JNI_SHARED_LIBRARIES :=
endif
endif
LOCAL_LDLIBS
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkFoo
LOCAL_SRC_FILES := ndkFoo.c
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE_PATH
LOCAL_MODULE_PATH_32
LOCAL_MODULE_PATH_64
specify module storage path
base_rules.mk:160:# to avoid path conflict we force using LOCAL_MODULE_PATH_64 for the first arch.
base_rules.mk:162:my_multilib_module_path := $(LOCAL_MODULE_PATH_32)
base_rules.mk:164:my_multilib_module_path := $(LOCAL_MODULE_PATH_64)
base_rules.mk:167:my_multilib_module_path := $(strip $(LOCAL_MODULE_PATH_$(my_32_64_bit_suffix)))
base_rules.mk:172:my_module_path := $(strip $(LOCAL_MODULE_PATH))
binary.mk:1400:## they may cusomize their install path with LOCAL_MODULE_PATH
LOCAL_MODULE_CLASS
# value
SHARED_LIBRARIES
STATIC_LIBRARIES
JAVA_LIBRARIES
EXECUTABLES
APPS
NOTICE_FILES
GYP
LOCAL_MULTILIB
# build/core/executable.mk:4:# To build it for TARGET_2ND_ARCH
# in a 64bit product, use "LOCAL_MULTILIB := 32"
LOCAL_MULTILIB := 32
LOCAL_NDK_STL_VARIANT
ifneq (1,$(words $(filter none system stlport_static stlport_shared c++_static c++_shared gnustl_static, $(LOCAL_NDK_STL_VARIANT))))
$(error $(LOCAL_PATH): Unknown LOCAL_NDK_STL_VARIANT $(LOCAL_NDK_STL_VARIANT))
endif
LOCAL_REQUIRED_MODULES
caveat: doesn’t work by verified
Set LOCAL_REQUIRED_MODULES to any number of whitespace-separated module names, like “libblah” or “Email”. If this module is installed, all of the modules that it requires will be installed as well. This can be used to, e.g., ensure that necessary shared libraries or providers are installed when a given app is installed
base_rules.mk:591:my_required_modules := $(LOCAL_REQUIRED_MODULES) \
base_rules.mk:592: $(LOCAL_REQUIRED_MODULES_$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH))
base_rules.mk:594:my_required_modules += $(LOCAL_REQUIRED_MODULES_$($(my_prefix)OS))
build-system.html:697:<h4>LOCAL_REQUIRED_MODULES</h4>
build-system.html:698:<p>Set <code>LOCAL_REQUIRED_MODULES</code> to any number of whitespace-separated
clear_vars.mk:213:LOCAL_REQUIRED_MODULES:=
clear_vars.mk:270:LOCAL_REQUIRED_MODULES_$(TARGET_ARCH):=
clear_vars.mk:292:LOCAL_REQUIRED_MODULES_$(TARGET_2ND_ARCH):=
clear_vars.mk:312:LOCAL_REQUIRED_MODULES_$(HOST_ARCH):=
clear_vars.mk:331:LOCAL_REQUIRED_MODULES_$(HOST_2ND_ARCH):=
clear_vars.mk:347:LOCAL_REQUIRED_MODULES_$(HOST_OS):=
clear_vars.mk:361:LOCAL_REQUIRED_MODULES_$(HOST_CROSS_OS):=
LOCAL_SRC_FILES
LOCAL_SRC_FILES_32
LOCAL_SRC_FILES_64
# both 32-bit and 64-bit arch
# must specify LOCAL_SRC_FILES_32 and LOCAL_SRC_FILES_64 variable
# or you will get build error
include $(CLEAR_VARS)
LOCAL_MODULE := libstfaceunlock
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_32 := mtk/armeabi-v7a/libstfaceunlock.so
LOCAL_SRC_FILES_64 := mtk/arm64-v8a/libstfaceunlock.so
LOCAL_MULTILIB := both
LOCAL_MODULE_TAGS := optional eng
include $(BUILD_PREBUILT)
caveat : LOCAL_SRC_FILES value is relative with LOCAL_PATH.
LOCAL_STRIP_MODULE
If set to true (the default), the binary will be stripped and a debug link will be set up so that GDB will still work.
If set to no_debuglink, the binary will be stripped, but no debug link will be added.
If set to keep_symbols, it will strip the debug information, but keep the symbol table.
Any other value will prevent stripping.
LOCAL_WHOLE_STATIC_LIBRARIES
指定模块所需要载入的完整静态库,这些静态库在链接时不允许链接器删除其中无用的代码
LOCAL_VENDOR_MODULE
# this variable controls output directory to
# $TARGET_PRODUCT_OUT/vendor/lib
# $TARGET_PRODUCT_OUT/vendor/lib64
LOCAL_VENDOR_MODULE :=true
PLATFORM VERSION
build/core/version_defaults.mk # PLATFORM_VERSION
PRODUCT_BOOT_JARS
# boot jar:java系统库的路径由此变量控制
PRODUCT_OUT
envsetup.mk:349:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)
TARGET_2ND_ARCH_VAR_PREFIX
envsetup.mk:389:HOST_2ND_ARCH_VAR_PREFIX := 2ND
envsetup.mk:459:TARGET_2ND_ARCH_VAR_PREFIX := $(HOST_2ND_ARCH_VAR_PREFIX)
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_EXECUTABLES
build/core/envsetup.mk:433:target_out_shared_libraries_base := $(TARGET_OUT)
build/core/envsetup.mk:441:TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib64
build/core/envsetup.mk:443:TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
build/core/envsetup.mk:474:$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
build/core/envsetup.mk:476:$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_$(TARGET_2ND_ARCH)
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATES)/lib
TARGET_ARCH_XXX
TARGET_CPU_XXX
TARGET_2ND_ARCH
TARGET_2ND_CPU_ABI
# only in ndk
TARGET_ARCH_ABI := armeabi-v7a # or arm64-v8a
TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := generic
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv7-a-neon
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a53
TARGET_2ND_ARCH_VAR_PREFIX
TARGET_2ND_ARCH_VAR_PREFIX := $(HOST_2ND_ARCH_VAR_PREFIX)
TARGET_COMMON_OUT_ROOT
envsetup.mk:346:TARGET_COMMON_OUT_ROOT := $(TARGET_OUT_ROOT)/common
TARGET_COPY_OUT_PRODUCT
TARGET_COPY_OUT_PRODUCT := system/product
TARGET_COPY_OUT_VENDOR
envsetup.mk:250:TARGET_COPY_OUT_VENDOR := system/vendor
TARGET_PRODUCT_OUT_ROOT
envsetup.mk:344:TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product
TARGET_OUT
$ANDROID/out/target/product/device_name/system
TARGET_OUT_DATA_METRIC_TESTS
TARGET_OUT_EXECUTABLES
# in envsetup.mk
TARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin
TARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin
TARGET_OUT_HEADERS
TARGET_OUT_INTERMEDIATES
envsetup.mk:413: TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj_asan
envsetup.mk:415: TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj
TARGET_OUT_OEM
TARGET_OUT_PRODUCT
TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT)
TARGET_OUT_PRODUCT_ETC
TARGET_OUT_PRODUCT_ETC := $(TARGET_OUT_PRODUCT)/etc
TARGET_OUT_ROOT
# Android R
TARGET_OUT_ROOT := $(OUT_DIR)/target
envsetup.mk:324:TARGET_OUT_ROOT_release := $(OUT_DIR)/target
envsetup.mk:325:TARGET_OUT_ROOT_debug := $(DEBUG_OUT_DIR)/target
envsetup.mk:326:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))
TARGET_OUT_SHARED_LIBRARIES
ifeq ($(TARGET_IS_64_BIT),true)
# /system/lib always contains 32-bit libraries,
# and /system/lib64 (if present) always contains 64-bit libraries.
TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib64
else
TARGET_OUT_SHARED_LIBRARIES := $(target_out_shared_libraries_base)/lib
endif
TARGET_OUT_STATIC_LIBRARIES : customized
LIB_OPENCV_STATIC_32 := \
$(call intermediates-dir-for,STATIC_LIBRARIES,libcv,,,$(TARGET_2ND_ARCH_VAR_PREFIX))/libcv.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,libcxcore,,,$(TARGET_2ND_ARCH_VAR_PREFIX))/libcxcore.a
LIB_OPENCV_STATIC_64 := \
$(call intermediates-dir-for,STATIC_LIBRARIES,libcv,,,)/libcv.a \
$(call intermediates-dir-for,STATIC_LIBRARIES,libcxcore,,,)/libcxcore.a
TARGET_OUT_SYSTEM_OTHER
TARGET_OUT_VENDOR
TARGET_OUT_VENDOR_SHARED_LIBRARIES
build/core/envsetup.mk:524:target_out_vendor_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/vendor
build/core/envsetup.mk:526:target_out_vendor_shared_libraries_base := $(TARGET_OUT_VENDOR)
build/core/envsetup.mk:532:TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib64
build/core/envsetup.mk:534:TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
build/core/envsetup.mk:536:TARGET_OUT_VENDOR_RENDERSCRIPT_BITCODE := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)
build/core/envsetup.mk:544:$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib/$(TARGET_2ND_ARCH)
build/core/envsetup.mk:546:$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_SHARED_LIBRARIES := $(target_out_vendor_shared_libraries_base)/lib
TOPDIR
main.mk:35:TOPDIR :=
OUT_DIR
envsetup.mk:312:OUT_DIR := $(TOPDIR)out
#treple mode, set env : export OUT_DIR=out_prd