接上文https://blog.csdn.net/dongyi1988/article/details/128617738
直接代码拆分,那么在拆包和做包过程中,需要用到分仓,镜像与OTA包的拆分与组合,vendor与system相关编译依赖处理,开机验证链还必须给镜像签名。
代码管理
定制xml文件,可实现从不同仓下载代码
repo示例见 https://www.bbsmax.com/A/xl56yE1oJr/ ;示例是从本地仓库../CyanogenMod/android_build.git、远程仓库https://android.googlesource.com/platform/build/blueprint两个地方同步代码。
干净主分支,并根据需求创建子分支。
以system域为例,剥离一个android原生的干净主分支,子分支a为主干分支+HarmonyOS差异性补丁,子分支b为主干分支+MIUI差异性补丁,子分支c为主干分支+colorOS差异性补丁。
git分支使用与简介https://blog.csdn.net/m0_51371693/article/details/122653762
编译指定system域镜像,先切分支。
拆包
https://blog.csdn.net/dongyi1988/article/details/103994321
跟踪这个博客可以找到包括OTA包、boot.img、super.img等的拆解。
相关拆包网址还很多,例如https://blog.51cto.com/u_15243273/5426783
VNDK(The Vendor Native Development Kit)
google官网https://source.android.google.cn/docs/core/architecture/vndk
![](https://img-blog.csdnimg.cn/img_convert/05a5b0afd5b8c6f022785f215fa814f4.png)
使用方式参考官网或源代码。
打包
boot打包是mkbootimg,参考地址https://blog.csdn.net/kunkliu/article/details/122278029
super 打包是lpmake,参考地址https://cloud.tencent.com/developer/article/2126595
制作OTA包,android原生工具https://source.android.com/docs/core/ota/tools?hl=zh-cn,输入参数tardis-target_files.zip解压就是目标版本的相关文件,修改替换即可。
其它镜像编译打包方式可以打开编译日志检索镜像名,获取编译步骤。
签名
1.secboot镜像签名依赖平台方案商,高通sectool,联发科sign_flow.py&pl_lk.py,流程自查源代码)
2.avb镜像签名,avbtool工具 https://android.googlesource.com/platform/external/avb/+/master/README.md#Using-avbtool
使用范例https://blog.csdn.net/dongyi1988/article/details/103995737 dm-verity小结
3.对OTA包的签名https://source.android.com/docs/core/ota/sign_builds?hl=zh-cn#sign-ota-packages
拆包、打包以及签名涉及很多镜像,具体操作流程可以查编译日志与mk文件。
组包编译流程
需要在andorid现有编译架构外再做个壳,经过下面几步编译出指定需求包:
将各域代码多次切分支、同步代码与编译,生成所有分支镜像,例如system域4个分支就有4个镜像system_android.img、system_harmonyOS.img、system_MIUI.img、system_colorOS.img;
存至编译服务器并版本化管理,供后面使用;
根据编译输入参数选择对应镜像,进行签名,组tardis-target_files.zip包,OTA包制作与签名。
如果没有修改内容,只是组包编译输入参数差异,直接到第c步。
如果只有system域修改:
a.如果主干分支修改,编译system域4个分支镜像;如果harmonyOS分支修改,编译system_harmonyOS.img;存至编译服务器并版本化管理;
b.根据编译输入参数选择对应镜像,进行签名,组tardis-target_files.zip包,OTA包制作与签名。
如果存在复制型文件(直接放入镜像中的文件,例如配置参数、固件等)更换,以odm中ko文件更新为例:
a. odm拆包、新ko替换、odm打包,存至编译服务器并版本化管理;
b.根据编译输入参数选择对应镜像,进行签名,组tardis-target_files.zip包,OTA包制作与签名。
这个应该是正常想到的组包编译流程。
![](https://img-blog.csdnimg.cn/img_convert/48d3efb3c4845e2544741e31f2492b99.png)
组合OTA包太多了怎么办
升级服务器只保留最新的和常用的OTA包。
不常用的或者版本久远的OTA包在有请求时临时制作,步骤如下:
服务器不存储完整OTA包,只存储所有域的所有分支镜像;
设备发送自己的硬件信息与需求到服务器;
服务器检索匹配域镜像,组tardis-target_files.zip包生成需求的OTA包,临时存放;
下发到设备,升级。
下文,结构拆https://blog.csdn.net/dongyi1988/article/details/128633808