android-deps-diff
对比Android工程两个分支的组件依赖差异,并生成报告存档。
背景
Android的组件依赖主要通过Maven来管理依赖,而Maven依赖是可以传递的,
例如:Project A 依赖 libB,libB 依赖 libC,那么当新版libB升级了libC,ProjectA升级了libB之后,可能会出现开发人员对libC的升级并不知情;
会造成以下几个问题:
- 对于RD,组件库出现非透明的修改或移除;
- 对于QA,测试覆盖范围遗漏,存在隐藏风险;
- 组件库间版本冲突、兼容问题;
- 组件库依赖源头难以定位,组件库被动升级后,难以梳理清导致升级的源头;
- 组件库升级无记录,无法轻松追溯组件库是在哪个版本被升级;
解决的问题
- 解决从开发到测试链路中组件依赖变更不透明问题,防止有隐藏问题存在;
- 归档每个版本组件依赖的变更记录,做到组件升级有记录可查;
- 可以对依赖元数据进行二次开发,例如:测试团队根据依赖元数据生成需要二轮回归的组件的TODO LIST;
- 工具具备通用性,其他Android项目也可以0侵入使用此工具;
工具特点
依赖对比工具具备以下几点:
- 对源码工程0侵入,使用工具时不需要涉及源码工程任何改动;
- 工具对运行环境的要求低,能在绝大多数平台可以轻松运行,除Android编译和Python环境,不需要额外配置其他的环境;
- 可以导出依赖信息的元数据,以便其他需求的二次开发;
- 依赖分析和报告展示分离开,使用C/S架构,以便依赖分析CoreApi修改和报告样式升级互不影响;
- 可以轻松配置在ci中运行,以及本地运行;
依赖对比报告具备以下几点:
- 可以导出HTML格式报告,以便在其他框架平台中轻松增加报告超链接或直接展示报告;
- 报告中可以清晰展示变更、新增、删除、无变更的组件;
- 报告中可以清晰展示宿主工程最终依赖组件版本的依赖关系;
- 报告中可以排查组件不同版本的依赖关系及详细信息;
工具基本原理
- 利用Python开发依赖对比CoreApi,并输出Json格式的元数据;
- HTML+JS 根据Json元数据进行数据分析和展示,形成依赖对比报告;
- Gradle 生成每个分支的依赖详细报告,同时保留Json格式的元数据;
工具效果展示
基于https://github.com/iceCola7/WanAndroid
工程对 v1.1.8
和 v1.0.0
生成组件依赖对比报告:
点击查看网页效果
使用方式
- clone 工程
git clone https://github.com/wei120698598/android-deps-diff.git
执行脚本方式可选方式
- 在Terminal中执行
# project_path: 工程路径
# module_name : module名称
# branch_1 : 对比的分支1
# branch_2 : 对比的分支2
# gradle_args : gradle命令参数,-Pxxx=xxx
python diff.py project_path module_name branch_1 branch_2 gradle_args
- 配合ci
除了上面通过命令参数传递,也可以通过环境传递参数;
如果ci中project_path、module_name、branch_1、branch_2为环境变量,
可以打开diff.py中代码的注释
diff(os.getenv("project_path"), os.getenv("module_name"), os.getenv("branch_1"), os.getenv("branch_2"), os.getenv("gradle_args"))
Jenkins HTML Report
Jenkins展示HTML Report无法加载CSS、JS
在Build构建流程中增加Execute system Groovy script
,执行Groovy command:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")