./packages/apps/Settings/Android.mk:8:LOCAL_PACKAGE_NAME:=Settings./packages/apps/Stk/Android.mk:10:LOCAL_PACKAGE_NAME:=Stk
./packages/apps/Contacts/Android.mk:10:LOCAL_PACKAGE_NAME:=Contacts./packages/apps/Mms/Android.mk:8:LOCAL_PACKAGE_NAME:=Mms
./packages/apps/Camera/Android.mk:8:LOCAL_PACKAGE_NAME:=Camera./packages/apps/Phone/Android.mk:11:LOCAL_PACKAGE_NAME:=Phone
./packages/apps/VoiceDialer/Android.mk:8:LOCAL_PACKAGE_NAME:=VoiceDialer
BUILD_SHARED_LIBRARY-指明要编译成动态库。编译的目标,用include操作符
UILD_STATIC_LIBRARY来指明要编译成静态库。
如果是java文件的话,会用到系统的编译脚本host_java_library.mk,用BUILD_PACKAGE来指明。三个编译
-------------------include$(BUILD_STATIC_LIBRARY)
BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk-------------------include$(BUILD_SHARED_LIBRARY)
./build/core/config.mk:50:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk-------------------include$(BUILD_HOST_SHARED_LIBRARY)
BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk-------------------include$(BUILD_EXECUTABLE)
build/core/config.mk:51:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk-------------------include$(BUILD_HOST_EXECUTABLE)
./build/core/config.mk:53:BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk
-------------------
BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk-------------------BUILD_JAVA_LIBRARY
./build/core/config.mk:58:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk------------------
BUILD_STATIC_JAVA_LIBRARY编译静态JAVA库
./build/core/config.mk:59:BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk------------------BUILD_HOST_JAVA_LIBRARY编译本机用的JAVA库./build/core/config.mk:60:BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk------------------
BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mkBUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mkBUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mkBUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mkBUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk
BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mkBUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mkBUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk
BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mkBUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mkBUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mkBUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mkBUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk
BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mkBUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk
============LOCAL_PRELINK_MODULE
Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,
是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的
动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。
动态链接和加载的过程开销很大,并且在大多数的系统上,函数库并不会常常被更动,每次程序被执行时所进行的链接
动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间
利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序
启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。
Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保
证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么androidframework代码一改动,
这时候就会导致相关的应用程序重新被编译。
这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。
--------------------变量设置为false那么将不做prelink操作LOCAL_PRELINK_MODULE:=false
默认是需要prlink的,同时需要在build/core/prelink-linux-arm.map中加入libhellod.so0x96000000
这个map文件好像是制定动态库的地址的,在前面注释上面有一些地址范围的信息,注意库与库之间的间隔数,
如果指定不好的话编译的时候会提示说地址空间冲突的问题。另外,注意排序,这里要把数大的放到前面去,
按照大小降序排序。
解析LOCAL_PRELINK_MODULE变量
build/core/dynamic_binary.mk:94:ifeq($(LOCAL_PRELINK_MODULE),true)ifeq($(LOCAL_PRELINK_MODULE),true)
$(prelink_output):$(prelink_input)$(TARGET_PRELINKER_MAP)$(APRIORI)
$(transform-to-prelinked)transform-to-prelinked定义:
./build/core/definitions.mk:1002:definetransform-to-prelinkeddefinetransform-to-prelinked@mkdir-p$(dir$@)
@echo\Prelink:$(PRIVATE_MODULE)($@)\$(hide)$(APRIORI)\\
--prelinkmap$(TARGET_PRELINKER_MAP)\\--locals-only\\--quiet\\$<\\
--output$@endef
./build/core/config.mk:183:APRIORI:=
$(HOST_OUT_EXECUTABLES)/apriori$(HOST_EXECUTABLE_SUFFIX)
prelink工具不是常用的prelink而是apriori,其源代码位于”
动态库优化——Prelink(预连接)技术
http://www.eefocus.com/article/09-04/71629s.html
===============LOCAL_ARM_MODE:=arm
目前Android大部分都是基于Arm处理器的,Arm指令用两种模式Thumb(每条指令两个字节)和arm指令(每条指令四个字节)
LOCAL_CFLAGS+=-O3-fstrict-aliasing-fprefetch-loop-arrays
通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高LOCAL_CFLAGS+=-W-WallLOCAL_CFLAGS+=-fPIC-DPIC
LOCAL_CFLAGS+=-O2-g-DADB_HOST=1-Wall-Wno-unused-parameterLOCAL_CFLAGS+=-D_XOPEN_SOURCE-D_GNU_SOURCE-DSH_HISTORYLOCAL_CFLAGS+=-DUSEOVERLAY2根据条件选择相应的编译参数ifeq($(TARGET_ARCH),arm)
LOCAL_CFLAGS+=-DANDROID_GADGET=1LOCAL_CFLAGS:=$(PV_CFLAGS)endif
ifeq($(TARGET_BUILD_TYPE),release)LOCAL_CFLAGS+=-O2endif
LOCAL_LDLIBS:=-lpthreadLOCAL_LDLIBS+=-ldl
ifdefUSE_MARVELL_MVED
LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_mpeg4aspdecmved_wmmx2lnxlib_il_h264decmved_wmmx2lnx
LOCAL_SHARED_LIBRARIES+=libMrvlMVEDelse
LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_h264dec_wmmx2lnxlib_il_mpeg4aspdec_wmmx2lnx
endif
====================其他一些变量和脚本:HOST_JNILIB_SUFFIXLOCAL_MODULE_SUFFIX
LOCAL_MODULE_SUFFIX:=$(HOST_JNILIB_SUFFIX)HOST_GLOBAL_LDFLAGSTARGET_GLOBAL_LDFLAGSPRIVATE_LDFLAGSLOCAL_LDLIBS
LOCAL_C_INCLUDES
LOCAL_STATIC_LIBRARIES
LOCAL_STATIC_LIBRARIES+=codecJPDec_WMMX2LNXmiscGen_WMMX2LNXLOCAL_SHARED_LIBRARIES
LOCAL_SHARED_LIBRARIES+=libMrvlIPP
LOCAL_SHARED_LIBRARIES+=$(common_SHARED_LIBRARIES)LOCAL_SHARED_LIBRARIES+=libMrvlIPPLOCAL_SHARED_LIBRARIES+=libdlifeq($(TARGET_PRODUCT),littleton)
LOCAL_C_INCLUDES+=vendor/marvell/littleton/m2d\\LOCAL_SHARED_LIBRARIES+=libOmxCoreendif
vendor/marvell/littleton/littleton.mk:27:PRODUCT_NAME:=littletonvendor/marvell/littleton/littleton.mk:28:PRODUCT_DEVICE:=littletonvendor/marvell/littleton/AndroidProducts.mk:13:$(LOCAL_DIR)/littleton.mkvendor/sample/products/sample_addon.mk:40:PRODUCT_NAME:=sample_addonvendor/htc/dream-open/htc_dream.mk:6:PRODUCT_NAME:=htc_dream./vendor/htc/dream-open/htc_dream.mk:7:PRODUCT_DEVICE:=dream-open./vendor/htc/dream-open/AndroidProducts.mk:3:$(LOCAL_DIR)/htc_dream.mkbuild/target/product/generic.mk:26:PRODUCT_NAME:=generic
build/target/product/generic_with_google.mk:20:PRODUCT_NAME:=generic_with_googlebuild/target/product/min_dev.mk:6:PRODUCT_NAME:=min_devbuild/target/product/core.mk:2:PRODUCT_NAME:=build/target/product/sim.mk:7:PRODUCT_NAME:=simbuild/target/product/sdk.mk:37:PRODUCT_NAME:=sdk
build/tools/buildinfo.sh:20:echo\lunchsample_addon-englunchhtc_dream-englunchgeneric-englunch1
lunchsim-eng
TARGET_BUILD_TYPE=releaselunch2
TARGET_BUILD_TYPE=debuglunchgeneric-user
.PHONY:systemtarball-nodeps
systemtarball-nodeps:$(FS_GET_STATS)\\
$(filter-outsystemtarball-nodepsstnod,$(MAKECMDGOALS))
$(build-systemtarball-target).PHONY:stnod
stnod:systemtarball-nodepssystemimage-nodepssnod
./core/main.mk:BUILD_SYSTEM:=$(TOPDIR)build/core
./core/main.mk:include$(BUILD_SYSTEM)/config.mk./core/main.mk:include$(BUILD_SYSTEM)/cleanbuild.mk
./core/main.mk:include$(BUILD_SYSTEM)/version_defaults.mk./core/main.mk:include$(BUILD_SYSTEM)/definitions.mk./core/main.mk:include$(BUILD_SYSTEM)/Makefile
./core/static_java_library.mk:include$(BUILD_SYSTEM)/java_library.mk./core/host_java_library.mk:include$(BUILD_SYSTEM)/base_rules.mk./core/executable.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk./core/java_library.mk:include$(BUILD_SYSTEM)/java.mk./core/binary.mk:include$(BUILD_SYSTEM)/base_rules.mk
./core/raw_executable.mk:include$(BUILD_SYSTEM)/binary.mk./core/prebuilt.mk:include$(BUILD_SYSTEM)/base_rules.mk./core/host_executable.mk:include$(BUILD_SYSTEM)/binary.mk
./core/combo/select.mk:$(combo_target)PRELINKER_MAP:=$(BUILD_SYSTEM)/prelink-$(combo_os_arch).map
./core/shared_library.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk./core/config.mk:include$(BUILD_SYSTEM)/pathmap.mk
./core/config.mk:BUILD_COMBOS:=$(BUILD_SYSTEM)/combo./core/config.mk:CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk
./core/config.mk:BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk./core/config.mk:BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk
./core/config.mk:BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk
./core/config.mk:BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mk./core/config.mk:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk./core/config.mk:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk
./core/config.mk:BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk./core/config.mk:BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk./core/config.mk:BUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk
./core/config.mk:BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk./core/config.mk:BUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk
./core/config.mk:BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk./core/config.mk:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk
./core/config.mk:BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk./core/config.mk:BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk./core/config.mk:BUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk
./core/config.mk:BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mk./core/config.mk:BUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk
./core/config.mk:HOST_JDK_TOOLS_JAR:=$(shell$(BUILD_SYSTEM)/find-jdk-tools-jar.sh)./core/version_defaults.mk:INTERNAL_BUILD_ID_MAKEFILE:=$(wildcard$(BUILD_SYSTEM)/build_id.mk)
./core/config.mk:include$(BUILD_SYSTEM)/envsetup.mk./core/config.mk:include$(BUILD_SYSTEM)/combo/select.mk
linux ,Android基础知识总结



