Android mk variable

文章目录

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值