在移动端多仓库、多形态(源码/二进制)的规模化应用场景中,研发流程的核心目标是解决多团队并行开发的协同效率、版本一致性、依赖管理及质量稳定性问题。以下是一套经过实践验证的研发流程定义框架,涵盖从需求到发布的全链路设计:
一、前置基础:仓库与形态管理规范
规模化研发的前提是明确“什么代码放在哪里、以什么形态交付”,避免仓库混乱和依赖失控。
1. 仓库分层与职责定义
按“业务-基础”和“复用粒度”将仓库分为4类,确保边界清晰:
- 业务仓库:承载具体业务模块(如“首页”“支付流程”),源码开发,仅内部团队维护,不对外暴露依赖。
- 公共业务组件仓库:可复用的业务组件(如“通用弹窗”“登录模块”),支持源码/二进制双形态交付,供多个业务团队使用。
- 基础技术库仓库:底层技术能力(如“网络请求”“图片加载”),仅二进制交付(避免源码篡改),由架构团队维护。
- 宿主工程仓库:最终打包的App壳工程,不写业务代码,仅负责集成各模块二进制包,管理全局配置(如权限、版本号)。
2. 形态交付规则
模块类型 | 源码交付场景 | 二进制交付场景 | 交付物格式(iOS/Android) |
---|---|---|---|
业务仓库 | 团队内部开发 | 跨团队联调(临时) | iOS:Framework;Android:AAR |
公共业务组件 | 组件迭代开发 | 业务团队集成(正式) | iOS:XCFramework;Android:Maven包 |
基础技术库 | 禁止(仅架构团队可见源码) | 所有业务团队使用 | iOS:静态库;Android:Maven包 |
二、核心流程:多仓库并行开发全链路
阶段1:需求拆解与依赖规划
- 需求分层:将产品需求拆解为“业务模块需求”“组件迭代需求”“基础库适配需求”,明确各需求对应的仓库和负责人。
- 依赖图谱构建:使用工具(如
CocoaPods Graph
、Gradle Dependency Insight
)生成当前版本的依赖树,标记需变更的模块及影响范围(例:若修改“网络库”,需同步确认所有依赖它的组件是否兼容)。 - 并行开发排期:按“依赖顺序”划分开发批次:
- 无依赖的模块(如独立业务组件)优先启动;
- 被依赖模块(如基础库)提前1-2个迭代启动,预留适配时间;
- 宿主工程最后启动(仅集成,不开发)。
阶段2:多仓库并行开发
核心是“各自开发不阻塞,依赖变更可追溯”。
- 独立开发规范:
- 每个仓库使用“feature分支”开发(命名格式:
feature/需求ID-功能描述
),分支生命周期与需求周期绑定。 - 源码开发时,通过“本地依赖”调试(如iOS用
path
引入,Android用project(:module)
),避免频繁提交二进制包。
- 每个仓库使用“feature分支”开发(命名格式:
- 跨仓库依赖变更处理:
- 若A仓库依赖B仓库的新功能,B仓库先提交“预发布二进制包”(标记
-SNAPSHOT
版本),A仓库临时依赖该版本开发; - 使用“变更通知机制”:B仓库合并代码后,通过工具(如GitLab Webhook+企业微信机器人)自动通知所有依赖方“需更新依赖版本”。
- 若A仓库依赖B仓库的新功能,B仓库先提交“预发布二进制包”(标记
阶段3:代码提交与质量门禁
- 单仓库质量管控:
- 提交代码前执行本地钩子(
pre-commit
):自动格式化代码、执行单测(覆盖率≥80%)、检测敏感信息(如密钥)。 - 提交PR/MR时,触发CI流水线:静态代码分析(SonarQube)、全量单测、编译二进制包(供下游依赖测试)。
- 合并门槛:至少1名团队外相关方(如依赖该模块的团队成员)Code Review通过。
- 提交代码前执行本地钩子(
- 跨仓库一致性校验:
- 当多个仓库修改存在关联(如“组件A”和“组件B”需同步兼容新接口),通过“关联PR/MR”机制(如GitLab的
/relates to
)绑定,必须同时合并,避免版本断层。
- 当多个仓库修改存在关联(如“组件A”和“组件B”需同步兼容新接口),通过“关联PR/MR”机制(如GitLab的
阶段4:联调与集成测试
- 分层联调策略:
- 团队内联调:业务仓库源码集成公共组件的
-SNAPSHOT
二进制包,通过“本地代理”(如iOS的CocoaPods Local Pod
)临时替换需调试的组件源码。 - 跨团队联调:所有模块提交“Release Candidate(RC)版本”二进制包,宿主工程集成RC包,在测试环境(TestFlight/Firebase App Distribution)部署联调包。
- 全量集成测试:宿主工程集成所有模块的RC包,执行自动化UI测试(如Appium)和兼容性测试(多机型/系统版本)。
- 团队内联调:业务仓库源码集成公共组件的
阶段5:版本发布与灰度
- 版本号规范:采用“语义化版本+仓库标识”,例:
业务组件A-v2.1.0
、基础库B-v1.3.2
,宿主工程版本与集成的模块版本映射(如App-v3.0.0 = 组件A-v2.1.0 + 基础库B-v1.3.2
)。 - 二进制发布流程:
- 各仓库通过CI自动打包二进制包,上传至私有仓库(如iOS:Artifactory;Android:Nexus)。
- 发布前执行“兼容性测试”:用新二进制包替换旧版本,验证所有依赖模块是否正常运行(避免“局部更新导致全局崩溃”)。
- 灰度策略:
- 先发布“内部测试版”(仅开发/测试团队),验证基础功能;
- 再发布“小流量灰度版”(10%用户),监控崩溃率、性能指标;
- 最终全量发布,同步更新依赖图谱和版本日志。
三、效率保障:工具链与协同机制
1. 自动化工具链
- 依赖管理工具:
- iOS:
CocoaPods
(源码依赖)+Carthage
(二进制缓存); - Android:
Gradle Module
(源码)+Maven
(二进制)+Dependency Lock
(锁版本)。
- iOS:
- CI/CD流水线:
- 单仓库CI:提交代码后自动编译、测试、打二进制包(如Jenkins、GitHub Actions)。
- 全量集成CI:定时(如每日凌晨)拉取所有仓库的最新版本,构建宿主工程并执行全量测试,提前暴露集成问题。
- 依赖变更检测工具:
- 自研工具监控仓库版本变更,当被依赖模块升级时,自动提醒依赖方进行兼容性验证(例:若“网络库”从v1.0升级到v2.0,依赖它的“支付组件”需确认是否适配)。
2. 协同机制
- 跨仓库需求看板:用Jira等工具建立“多仓库需求关联看板”,可视化各仓库进度及依赖阻塞点(例:“组件A阻塞业务B”“基础库C未完成导致组件D停滞”)。
- 定期同步会议:
- 日会:各仓库负责人同步进度,聚焦依赖阻塞问题;
- 周会:架构团队评审依赖变更合理性,避免“重复造轮子”或“过度耦合”。
- 版本冻结机制:发布前3天冻结所有模块版本,仅允许修复Critical Bug的紧急更新,避免最后时刻的版本混乱。
四、关键原则:避免规模化陷阱
- 最小权限原则:基础库源码仅对架构团队开放,公共组件源码仅对组件维护团队开放,减少非必要修改。
- 二进制优先原则:跨团队协作时,优先使用二进制包(而非源码),降低编译时间(例:一个包含100个模块的App,源码编译需2小时,二进制集成仅需10分钟)。
- 依赖收敛原则:禁止“循环依赖”(如A依赖B,B依赖A),通过“接口抽象层”解耦(例:A定义接口,B实现,A依赖接口而非B的具体实现)。
- 故障隔离原则:每个模块必须包含“降级策略”(如网络库失败时启用本地缓存),避免单个模块崩溃导致整个App不可用。
总结
移动端多仓库规模化研发的核心是“规范分层+自动化工具+协同机制”:通过仓库分层明确边界,通过二进制交付加速集成,通过CI/CD和依赖管理工具消除人工操作成本,最终实现“100个仓库并行开发如同一单个仓库般高效”。实际落地时需根据团队规模(如10人vs100人)调整流程粒度,避免过度设计。