Andriod编译过程一般为:
1.source build/envsetup.sh //加载命令,在项目根目录下(~/purple/code/a/A_code20211126/sdm660)目录
备注:在envsetup.sh里将执行vendor和device目录及各自子目录下所有的vendorsetup.sh,这些vendorsetup.sh做的事情是调用add_lunch_combo将它们各自的产品添加到 LUNCH_MENU_CHOICES 变量里,在lunch时会用到。
2. lunch //选择平台编译选项
lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译项,来定义Product和编译过程中用到的全局变量。
备注:这里的product列表是用户在执行source build/envsetup.sh时,including了一些shell脚本,从而添加至产品列表的,与第一步对应上。
3 .make //执行编译
所有的操作是基于在A的项目基础上新建B的项目,即两个项目共用一套代码.
二 新增lunch项
1、 如果没有项目代码,需在本地仓中新建一个文件夹从库中拉一份代码下来,
需要使用repo命令下载一份代码 //下载代码
2、进入代码的device目录找到对应版本的配置文件路径
(~/purple/code/a/A_code20211126/sdm660/device/guideir/common)
该路径下有一个vendorsetup.sh文件,打开该文件,新增配置选项,如图:
下面一半是新增的版本型号,该文件会在lunch的时候去让用户选择编译什么版本。
在~/purple/code/a/A_code20211126/sdm660/device/guideir目录下将A的目录复制一份且命名为B,然后修改B中的部分文件即可。cp –r A B
复制完成后需要修改部分文件的内容,我们将已经修改好的和之前的经行对比可以看到具体的修改点 meld A/ B/
这样就可以去查看两个文件的修改情况。
在Andriod.mk文件中会去包含很多xml文件,最后会根据这些xml文件去配置编译选项。
这样,一个新的项目的lunch过程就基本完成了,后面只需要在对应的目录下去修改相应的文件即可。
小结:source build/envsetup.sh会调用add_lunch_combo函数添加很多单板信息进来,同时还会查找/device和/vendor下的vendorsetup.sh文件,查找深度为4级目录,找到后就执行它,它里面至少会有这么一行:add_lunch_combo xxxx,继续添加单板信息。lunch函数则会打印出所有的单板信息供你选择,你输入选择后,lunch命令会对你的选择做一系列检测,并从中提取出product和varient,并最终导出这些信息,供正式编译的时候使用。
如果想要研究每一步具体做了哪些事情,可以去深入研究具体的各个文件的执行过程,和一些变量的作用。
可以用Cherry Pick命令对上库的代码在本地仓进行更新。