魅族 段启智:Android多分支代码自动同步

霍涵蕾

2017/11/14 发布于 技术 分类

维护多个分支,是Android系统开发的痛点,尤其是设备厂商,诸如华为,小米,魅族等,都需在多分支维护上投入大量的成本。本方案提供一个多分支代码同步的自动构建工具,包含三个部分:1)BringUp:快速移植新设备,利用两次合并和自动解冲突技术,能够做到小团队短时间全量移植;2)AutoMerger:可定制的代码同步策略,在多分支之间灵活合并代码。在线的配置界面,方便不同的业务团队配置适合自身的代码同步策略。监测代码提交记录,按需自动将代码合并到下游分支,并触发下游分支自构建。当发现冲突时,及时提醒代码提交人;3)ConflictTerminator:在线解决冲突工具,无需本地代码,方便开发人员线上解决代码同步产生的冲突。部署本当案后,开发人员通常只需要维护1~2个主干分支,其他分支的代码和构建均自动完成,从之前动辄10多个分支的维护中释放出来。经过不同Android系统开发团队长时间的实践检验,本方案能够极大的降低多分支维护的成本。

文字内容
1. Android多S魅分A族C支段C代2启0智1码7自动同步 2017.10.20
2. 目录 1 2 3 4 5 维护多个分支的原因 分分分支支支S自合自AC并动动C的合合2方并并0的法的17比实策践较略 总结与展望
3. 1. 维护多个分支的原因 AOSP Google Chipset Device SACC2017Solution Manufacturer Qualcomm MTK Meizu Xiaomi AOSP的代码自 身不断迭代而且 演进速度极快 芯片方案商基于 AOSP的代码进 行二次开发 设备厂商基于芯 片方案商的代码 进行二次开发 Retailor Online Offline 不同的销售市场 反馈导致不同的 产品定义
4. 1. 维护多个分支的原因 不同芯片平台 Lollipop SACC2017Marshmallow Nougat 不同安卓版本 运营商定制 海外定制 不同市场定制
5. 1. 维护多个分支的原因  作为一个Android设备厂商,大都基于上游的芯 片方案进行二次开发,而下游又有不同的市场销 售诉求,导致不得不维护多个分支 7 诸如小米、华为、魅族等国内的手机厂商,同时 201在维护的机型多达数十款,意味着不得不维护大 CC量的分支 SA 多分支维护是设备厂商的噩梦,需重复投入大量 的开发、测试、发布、运营等项目资源
6. 代码宏开关 运行时属性开关 运行时反射 中间件技术 编译开关 多分支之间进行代码合并 设一备个芯片厂平台商尽量适S想配A更尽多C的C机办型20法优1秀7减的代少码设分计 支 Gradle Flavor Gradle Build Types 机型退出机制,避免维护多版本
7. 目录 1 2 3 4 5 维护多个分支的原因 分分分支支支S自合自AC并动动C的合合2方并并0的法的17比实策践较略 总结与展望
8. 2. 分支合并的方法比较  手工通过对比工具进行代码合并  git cherry-pick  git rebase  git merge SACC2017
9. 2. 分支合并的方法比较 $ git cherry-pick E,F $ git rebase upstrSeaAmCC2017
10. 2. 分支合并的方法比较 $ git merge upstream SACC2017 利用git-rerere机制自动解决冲突
11. 2. 分支合并的方法比较 分支合并方式 不产生新提交 没有遗漏提交 容易解决冲突 cherry-pick rebase merge ×× S×√ACC2017√√ × × √ 与cherry-pick不同,merge一次性合并所有的提 交,无法对提交进行精准选择。
12. 2. 分支合并的方法比较 SACC2017AOSP官方负责人Jean-Baqtiste Queru:
13. 实践中够,快采速S用进AmC行Ce2r代g01e码7合移并植分支能
14. 目录 1 2 3 4 5 维护多个分支的原因 分分分支支支S自合自AC并动动C的合合2方并并0的法的17比实策践较略 总结与展望
15. 3. 分支自动合并的策略 CC20171. 对于上游分支的每一次提交,都会自动触发 SAAutoMerger的执行,正常提交会采用merge 在一个服务器上部署AutoMerger,该服务器 具备以下能力: 的方式合并到下游分支; 1. 接收从代码服务器发出的代码合并通知; 2. 如果某个提交注明不需要合并,则通过关键字 2. 与代码服务器进行代码同步; 判断(DO NOT MERGER),采用merge -s 3. 通知冲突责任人解决冲突。 ours的方式合并到下游分支。 3. 如果在合并过程中发生了冲突,则需要通知提 交人解决冲突。
16. 3. 分支自动合并的策略 Code Server 5. Notify When Conflict AutoMerger Tasks SACC2017 Conflicts 4. Merge Code AutoMerger Server
17. 3. 分支自动合并的策略 DONOTMERGE Commits To Merge SACC2017merge merge –s ours merge 遇到不需要Merge到下游的提交,则对待Merge 的提交进行分割,多次Merge
18. 目录 1 2 3 4 5 维护多个分支的原因 分分分支支支S自合自AC并动动C的合合2方并并0的法的17比实策践较略 总结与展望
19. 4. 分支自动合并的实践 120 人,60 天 新机型移植SA同CC时12维0人1护7, 7天 2款 旧机型维护 同时维护 24 款
20. 4. 分支自动合并的实践 新机型移植 MTK AOSP AOSP BSP Flyme SACC2017porting merge -s merge Resolve Conflicts MTK* BSP* Flyme Bringup Auto-merge
21. 极大的两减次少MS了eAr新CgCe机2+0型1工7移具植化的冲突
22. 4. 分支自动合并的实践 旧机型维护:分支同步方向可配置 $ git automerger M85-l1_base SACC2017└── M71-l1_base └── M86_flyme5 └── M76-l1_base └── M81-l1_base └── M88-l1_base └── M91-l1_base └── M98-l1_base └── L91-l1_base └── M75-l1_base 通过界面配置分支同步的上下游关系,可树状展示
23. 4. 分支自动合并的实践 旧机型维护:同步冲突邮件可配置 SACC2017 产生代码合并冲突时,提交人会实时收到邮件提醒
24. 4. 分支自动合并的实践 旧机型维护:冲突解决在线化 SACC2017
25. 同多步个策分略支可S维配A护C,C成2在0本1线7大解为决降冲低突
26. 目录 1 2 3 4 5 维护多个分支的原因 分分分支支支S自合自AC并动动C的合合2方并并0的法的17比实策践较略 总结与展望
27. 5. 总结与展望  多分支的代码自动同步方案包含:  多分支合并的方法  新机型移植的方法 7 旧机型维护的方法 201 整套方案已经健康运转2年,是魅族内部的分支 CC管理的技术支撑,多达30个分支在同时维护 SA 本方案涉及到虽然技术细节较多,从前端到后端, 从分支策略到代码管理,但可以迅速落地到其他 设备厂商  计划开源
28. SACC2017