main.mk1.检查版本号,设置环境变量(BUILD_SYSTEM)和缺省的目标。4.包含文件OUT_DIR/version_check.mk。JAVA,JAVAC的版本是否是1.6。transform-xxx-to-xxx的形式,比如transform-cpp-to-o。6.检查MAKECMDGOALS和TARGE_BUILD_VARIANT.根据MAKECMDGOALS设置标量is_sdk_build,是否编译SDK。persist.service.adb=18.检查PARDUCT_TAG是否包含dalvik.gc.type-precise,如果包含设置ADDITIONAL_DEFAULT_PROPERTIES+=dalvik.vm.dexopt-flags=m=y9.判断PRODUCT_COPY_FILES。Android.mk。14.若是全部编译,包含frameworks/policies/base/PolicyConfig.mk。生成android.policy模块,并定义了自己的make删除操作policy_installclean。apps_only生成TARGET_BUILD_APPS指定的APPS模块.若TARGET_BUILD_APPS包含all就编译全部APPS模块droid默认target。保存了所有要编进Android.jar的framework/base下的文件路径。3.设置编译目标,.jar,.bin,.so,.a,.apk,...。以BUILD_开头,指向具体的mk文件。COMMON_GLOBAL_CFLAGS,COMMON_RELEASE_CFLAGS。build/buildspec.mk.default。6.包含include$(BUILD_SYSTEM)/envsetup.mk。设置一些跟product相关的变量。$(BUILD_SYSTEM)/combo/select.mk。HOST_开头的变量,主要是向HOST_GLOBAL_CFLAGS添加标志。$(BUILD_SYSTEM)/combo/select.mk。可执行文件,静态库文件。include$(BUILD_SYSTEM)/combo/javac.mk。999999911.检查BUILD_ENV_SEQUENCE_NUMBER,这个是在前面的buildspec.mk设置或者通过envsetup.sh脚本设置。doxygen,还有一些是在/out/target/$($(HOST_OS)-$(HOST_ARCH))/bin下的程序,MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)/mkbootimg。TARGET_PROJECT_INCLUDES,13.获得sdk和ndk的版本号列表。改动应该在build_id.mk里。false)sim(TARGET_SIMULATOR:=false)TARGET_BUILD_VARIANTengHOST_OSwindows/linux/darwinHOST_ARCHx86/ppcHOST_BUILD_TYPEreleaseTARGET_OSlinuxTARGET_ARCHarmTARGET_BUILD_TYPErelease3.包含:include$(BUILD_SYSTEM)/product_config.mk。或TARGET_*_OUT_*形式。CALLED_FROM_SETUP=true。”PRODUCTS"和”DEVICES“。$(3)中变量的定义。$(3)是一个变量列表。PRODUCT.xxx.xxx中。product.mk。PRODUCT_MAKEFILES变量定义的mk文件列表product.mkimport-products调用import-nodes(node_fns.mk),设置$1=PRODUCTS,设置$3=$(_product_var_list),_product_var_list是以PRODUCT_开头的变量名。/build/target/product/generic.mk)device.mkimport-devices调用import-nodes(node_fns.mk),设置$1=DEVICES,设置$3=$(_device_var_list),_device_var_list是以DEVICE_开头的变量名。device.mkinherit-device将在所有的DEVICE_变量值后缀加上'@inherit:'device.mkresolve-short-device-name根据device的名字,得到定义它的mk文件路径3.调用import-products函数,判断TARGET_BUILD_APPS是否为空,若为空,只导入$(SRC_TARGET_DIR)/product/AndroidProducts.mk里的mk文件。否则调用get-all-product-makefiles,导入全部mk文件。4.根据要编译的目标TARGET_PRODUCT,通过调用resolve-short-product-name得到mk文件,结果存放在INTERNAL_PRODUCT变量里。再将PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_xxx的值赋值给PRODUCT_xxx。ADDITIONAL_BUILD_PROPERTIES追加PRODUCT_PROPERTY_OVERRIDES。这些PRODUCT_变量都在product下的mk文件里定义。一般add-clean-step应当在%/cleanspec.mk脚本中使用,命令会为$(1)定义一个变量保存,变量的名字是INTERNAL_STEP.$(_acs_id),所有的$(_acs_id)保存在INTERNAL_STEPS中。$(_acs_id)的值分成3个部分构造:第一部分是有cleanspec.mk的路径转化而来,用'_'替代'/','-'替代'.',后缀_acs。第二部分是$(INTERNAL_CLEAN_BUILD_VERSION),默认是4。clean-step就用几个@。-rf$(OUT_DIR)/target/common/obj/APPS/Camera*INTERNAL_CLEAN_STEPS+=packages_apps_Camera_CleanSpec-mk_acs4@:INTERNAL_CLEAN_STEPS+packages_apps_Camera_CleanSpec-mk_acs4@@:2.包含:$(BUILD_SYSTEM)/cleanspec.mk。删除整个$(OUT_DIR)。installclean_files,dataclean_files定义。PREVIOUS_BUILD_CONFIG的格式是$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)$(building_sdk)-{$(locale_list)}。(1,通过执行build/tools/buildinfo.sh根据PRODUCT_NAME变量值...获得2.文件$(TARGET_DEVICE_DIR)/system.prop3.ADDITIONAL_BUILD_PROPERTIES变量值)。需声明CREATE_MODULE_INFO_FILE。target3.包含$(BUILD_SYSTEM)/tasks目录下的所有.mk文件。LOCAL_变量,防止干扰。LOCAL_BUILT_STEM值就是$(LOCAL_BUILT_STEM)$(LOCAL_MODULE_SUFFIX),否则就是$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)。jablib.jar和package.apk。$(BUILD_SYSTEM)/key_char_map.mk主要分为两种类型:prebuilt和bin/lib文件。我们应该使LOCAL_MODULE全局唯一的。设置LOCAL_MODULE_PATH的默认值。则LOCAL_MODULE_PATH=$(TARGET_OUT_APPS)。设置LOCAL_BUILT_MODULE的默认值。built_module_path=target/common/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/,built_module_path=/target/product/generic/obj/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)__intermediates/。以Camera为例:LOCAL_BUILT_MODULE=out/target/product/generic/obj/APPS/Camera_intermediates/Camera.apk。设置LOCAL_INSTALLED_MODULE的默认值。$(LOCAL_BUILT_MODULE)。$(LOCAL_MODULE)就行了。Reserved京ICP备13025571号-2。