android make脚本解析,Android make脚本简记

CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core make -f build/core/config.mk dumpvar-abs-第一种形式,返回varName的值。第二种形式,返回varName的值,前缀上路径。考虑到android脚本中广泛使用':=’的变量定义方法,因此,基本上只能显示dumpvar.mk之前定义的变量值。LOCAL_xxxx的变量也不适用。

4. cleanbuild.mk的分析

main.mk在包含了config.mk后,会包含进cleanbuild.mk。

定义了add-clean-step命令。有一个入口参数

$(1),执行删除操作的具体shell命令。

一般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,第三部分是有'@'组成,cleanspec.mk中的第几个add- clean-step就用几个@。

例如,packages/apps/Camera/cleanspec.mk中定义了两个删除动作

$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/Camera*)

$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Camera*)

那么,对应的有

INTERNAL_STEP.packages_apps_Camera_CleanSpec-mk_acs4@ := rm -rf $(PRODUCT_OUT)/obj/APPS/Camera*

INTERNAL_STEP.packages_apps_Camera_CleanSpec-mk_acs4@@ := rm -rf $(OUT_DIR)/target/common/obj/APPS/Camera*

接着,包扩进cleanspec.mk

包含进$(PRODUCT_OUT)/clean_steps.mk,

接下来,检查CURRENT_CLEAN_BUILD_VERSION是否与INTERNAL_CLEAN_BUILD_VERSION相同,默认是4

如果相同,

执行所有在INTERNAL_STEPS中登记的删除操作。

否则,

删除 $(OUT_DIR)

然后,重新生成$(PRODUCT_OUT)/clean_steps.mk,写入"CURRENT_CLEAN_BUILD_VERSION := $(INTERNAL_CLEAN_BUILD_VERSION)"和"CURRENT_CLEAN_STEPS := $(INTERNAL_CLEAN_STEPS)"。

随后,读入$(PRODUCT_OUT)/previous_build_config.mk,看是否与当前的编译选项一致,不一致则标明上次的中间文件不可用,则删除相应的中间目录,或提示用户。接着重新将当前的信息写入$(PRODUCT_OUT)/previous_build_config.mk,格式是,

current_build_config := \

$(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)$(building_sdk)-{$(locale_list)}

echo "PREVIOUS_BUILD_CONFIG := $(current_build_config)" > \

$(previous_build_config_file)

最后,定义了两个target, installclean和dataclean。

dataclean删除的主要是./$(PRODUCT_OUT)/data/*,

installclean的删除包括dataclean。installclean的本意是用于不同build_type编译时删除前次的中间文件。

总结cleanbuild.mk的内容,就3件事,一是载入所有的CleanSpec.mk,二是检查更新clean_steps.mk和 previous_build_config.mk,避免不同编译间的互相干扰。最后是,定义installclean和dataclean。

5. cleanspec.mk的分析

首先定义

INTERNAL_CLEAN_BUILD_VERSION := 4

接着使用findleaves.py遍历所有子目录,找到CleanSpec.mk,并包含进。用户可以在CleanSpec.mk中定义自己需要的删除操作。实际上还可以包含不仅仅是删除的操作。

至此,INTERNAL_STEP.XXXX包含了所有CleanSpec.mk定义的clean动作。

6. version_checked.mk的分析

main.mk 在cleanbuild.mk后,会借助$(OUT_DIR)/version_checked.mk检查版本,如果版本不一致,则重新检查系统文件系统大小写敏感问题,路径上是否含有空格,java和javac的版本,没有问题,则更新version_checked.mk。

version_checked.mk中就定义了

VERSIONS_CHECKED := $(VERSION_CHECK_SEQUENCE_NUMBER)

7. showcommands和checkbuild的说明

checkbuild貌似并未使用。

showcommands必须同其它target一同使用,showcommands会详细打印出执行的具体命令内容。

8. definations.mk的说明

definations.mk中定义了大量的命令,其它的mk文件将使用。这其中包括执行编译链接的命令,通常是transform-XXX-to-XXX的形式,例如,transform-cpp-to-o。

其中的inherit-package命令有待研究...

Android101112: Android Make脚本的简记(5)

内容提要

文档简要整理Android的make脚本的内容。以供备忘和参考。

声明

仅限学习交流,禁止商业用途。转载需注明出处。

1. Makefile的分析

首先定义target, 用于生成$(OUT_DOCS)/index.html

再定义target, 用于生成$(TARGET_ROOT_OUT)/default.prop

再定义target, 用于生成$(TARGET_OUT)/build.prop。build.prop文件记录了一系列属性值。它的内容分成两部分,第一部分是一些关于 product,device,build的一般性属性值,第二部分的属性值源自ADDITIONAL_BUILD_PROPERTIES。 product配置mk文件中定义的PRODUCT_PROPERTY_OVERRIDES会加入到 ADDITIONAL_BUILD_PROPERTIES,建议增加property时,直接修改 PRODUCT_PROPERTY_OVERRIDES。

再定义target, 用于生成$(PRODUCT_OUT)/sdk/sdk-build.prop

再定义target,package-stats,用于生成$(PRODUCT_OUT)/package-stats.txt,这个文件包含了.jar,.apk后缀文件的信息。

再定义target,apkcerts-list,用于生成$(name)-apkcerts-$(FILE_NAME_TAG),描述各module的certificate和private_key文件信息。

接着,如果定义了CREATE_MODULE_INFO_FILE,则生成$(PRODUCT_OUT)/module-info.txt,其中包含了描述所有module的信息。

再定义target,event-log-tags。

接着,处理ramdisk.img

再处理boot.img,如果TARGET_NO_KERNEL不是true,则将kernel和ramdisk.img组装成boot.img。

接着,定影命令combine-notice-files,用于生成target,notice_files。notice_files会抽取生成相应的声明文件。

随后,建立target,otacert,用于将.x509.pem后缀的认证文件打包存放到$(TARGET_OUT_ETC)/security/otacerts.zip。

接着,建立target,recoveryimage,处理recovery img

还有下面的target,

systemimage-nodeps, snod

systemtarball-nodeps,stnod

boottarball-nodeps,btnod

userdataimage-nodeps

userdatatarball-nodeps

otatools

target-files-package

otapackage

installed-file-list

tests-zip-package

dalvikfiles

updatepackage

最后包含进 build/core/task/下的mk文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值