《Android项目编译系统》由会员分享,可在线阅读,更多相关《Android项目编译系统(13页珍藏版)》请在金锄头文库上搜索。
1、Android 项目编译系统修改:201007292010091720101013一 Make 文件的包含调用关系介绍 .2二 Android 项目编译系统介绍 .2三 Android 项目编译系统修改方案 .3四 Android 项目编译系统使用 .3五 C 风格的宏定义与 JAVA 的宏定义的用法 .4六 Android 项目编译系统功能介绍 .4七 MAKE 文件的调试方法。 .5八 MAKE 文件中的宏以及变量的使用方法。 .5九在 makefile 中找到合适的位置引用自己的宏定义。 .6十 注意事项。 .9十一 分析 android 系统的编译错误的方法。 .9十二 buildsy
2、stem 的编译版本介绍。 .11一 Make 文件的包含调用关系介绍Make.exe 会加载根目录下面的 MAKEFILE.在 MAKEFILE 中仅仅包含一行:Include build/core/main.mk所以,main.mk 文件是编译的开始文件。Main.mk 文件按照下面的次序包含各个 mk 文件1) config.mk2) cleanbuild.mk3) version_checked.mk4) definitions.mkconfig.mk 文件按照下面的次序包含各个 mk 文件1) buildspec.mk:这个文件位于根目录下面。 (我们要修改这个文件)2) envse
3、tup.mk:(我们要修改这个文件)3) vendor/qcom-proprietary/common/build/define.mk4) Boardconfig.mk: 会在两个目录中寻找 build/target/$targetdevice/boardconfig.mk vendor/*/$targetdevice/boardconfig.mk每次仅仅只包含一个符合条件的 Boardconfig.mkenvsetup.mk 中包含下面的 mk 文件1) version_default.mk二 Android 项目编译系统介绍说明如下:Tyq_option.mk 包含了所有的功能模块的控制开
4、关。每个产品会根据自己的定义来决定某个功能模块的开关状态:true or false 。如果整个平台需要某个功能模块,则只需要在 Tyq_option.mk 进行控制。产品 1PRD1.mk产品 2PRD2.mk产品 nPRDN.mkTyq_option.mk三 Android 项目编译系统修改方案在根目录下面创建 Buildspec.mk 文件。在这个文件中包含需要用到的产品 mk 文件和通用产品 mk 文件。创建一个脚本文件,这个脚本文件负责创建编译环境,执行编译过程。每个项目包含项目版本号文件和项目的编译批处理文件。每个产品包含产品 mk 文件。所有的产品共用一个通用产品 mk 文件.编
5、译系统一共需要 6 个共同文件:Buildspec.mk: 位于根目录下面Tymake/Tyq_option.mk:Tymake/javaMacroReplace.pl Tymake/tyq_make_env.mk:将 make 的环境变量导出到文件中,然后通过 shell 脚本,将变量导入到 shell 的环境变量中。start 脚本程序: 位于根目录下面Tymake/tyqenvsetup.sh: 创建 build 环境每个项目需要 2 个文件:项目 VerNumber 文件: 位于根木目录下面 项目启动脚本文件: 位于根木目录下面 主要是启动 shell 脚本每个产品需要一个文件:产品
6、mk 文件: 位于 tymake 目录下面修改了 build/core/envsetup.mk 文件 四 Android 项目编译系统使用1)在根目录下面执行./$PROJECT脚本 . /$PROJECT 产品名称 编译变量 编译类型 举例:./TBW5901_MAKE.BAT TBW590110_7480 user debug产品 id 是必须要输入的。2)在根目录下面会生成 out/target/product/$产品名称目录.在这个目录里面,存放编译生成的所有文件。在 release/产品名称_版本号目录下面,存放生成的 img 文件和编译 log.3)创建 build 环境Tyqen
7、v.sh 会根据项目名称和产品名称创建相关的 build 环境1)首先导入项目产品版本号等环境变量2)调用 android 的创建环境变量脚本五 C 风格的宏定义与 JAVA 的宏定义的用法C 风格的宏定义:1)在产品定义的 mk 文件中,用户设置某个功能模块的宏开关。/TBW590110_7480.MKHELLO_TEST:=true2) 在产品通用定义 mk 文件中,用户定义某个功能模块的开关。/TYQOPTION.mkifeq ($(HELLO_TEST),true)TY_CP_OPTION += HELLO_TESTEndif环境变量 TY_CP_CFLAGS 包含了所有的宏定义。用户
8、需要在相应的 MakFile中包含这个 TY_CP_CFLAGS。3)在 kernel 模块中使用 TY_CP_CFLAGS 方法。在 kernel 模块的 MakeFile 中修改下面一行:#tianyu liyeguang add on 20100820 :KBUILD_CFLAGS+=$TY_CP_CFLAGS#tianyu liyeguang add on 20100820 :4)在其他模块中使用 TY_CP_CFLAGS 方法找到对应的 MakeFile 文件。找到调用 gcc.exe 的位置。加入$TY_CP_CFLAGS六 Android 项目编译系统功能介绍1 make 的 j
9、ob 自动设置。./start 脚本会根据环境变量,动态设置 make 的 job 数目,发挥机器的最大性能。2 命令格式$项目名称_MAKE.BAT 产品名称 BUILD_VAR BUILDTYPE COMPILE_VERBUILD_VAR: user|userdebug|engeng is defaultBUILD_TYPE: release|debug release is default.COMPILE_VER: bsp|cust|platform 首先从命令行获得编译选项的值,如果没有,则从相应的产品定义中获得 默认值。 例如: TBW5901_MAKE.BAT TBW590110_
10、7480 eng release bsp$项目名称_MAKE.BAT 产品名称 clean清除目前项目的目标文件。例如:TBW5901_MAKE.BAT TBW590110_7480 clean3 创建 build 环境Source tymake/tyqenv.sh 项目名称 产品名称 BUILD_VAR BUILDTYPE例如 Source build/tyqenv.sh TBW5901 TBW590110_7480 eng release七 MAKE 文件的调试方法。1)在 MAKE 文件中显示调试信息。$(info Vara=$(Vara):显示 Vara 的内容2)阻止 make 程序
11、继续运行。$(error “Test Stop”) : make 会在此处停止运行。八 MAKE 文件中的宏以及变量的使用方法。1)如何判断一个宏是否被定义。tyq_option.mkTY_CP_OPTION += TYQ_TEST1ifneq ($(filter TYQ_TEST1,$(TY_CP_OPTION),) $(info TYQ_TEST1 is exist)Else$(info TYQ_TEST1 is not exist)endif2) 如何从一个环境变量中判断一个变量的赋值tyq_option.mkTYQ_TEST:=trueifeq ($(TYQ_TEST),true) /
12、 true 不能用引号括起来。$(info TYQ_TEST=true)Else$(info TYQ_TEST=false)Endif 3) 如何从一个环境变量的字符串列表中判断一个变量的赋值(如何获得 TYQ_TEST 的内容)tyq_option.mkTY_CP_OPTION +=TYQ_TEST=trueifeq (true,$(findstring true,$(filter TYQ_TEST=%,$(TY_CP_OPTION)$(info TYQ_TEST=true)Else$(info TYQ_TEST=false)Endif或者Ifeq($(patsubst TYQ_TEST =%,%,$(filter TYQ_TEST %,$(TY_CP_OPTION),true)$(info TYQ_TEST =true)else$(info TYQ_TEST =false)Endif九在 makefile 中找到合适的位置引用自己的宏定义。在某些 ma