Andriod 组件化实用技巧
第一步:拆分前清理无用文件
组件化拆分代码前,最好做一次lint检查,主要删除无用代码和资源。避免组件独立成git仓库后,因调用关系不完整,静态检查可能出现更多误判,而且删除无效资源和代码,可以减轻一部分拆分工作量。
很早之前在eclipse用过UCDetector,非常有效,记忆犹新。
在Android Studio下,可以使用AS自动工具,Analyze -> Inspect Code,检查某个目录代码。
也可以使用 Lint 检查: Analyze -> Run Inspection By Name -> 输入检查项。
例如 Unused declaration | unused resource,检查无用资源。
Analyze –> Run inspection by name –> 输入 Unused declaration 检查无效类、方法、变量等,通过面板勾选,根据自己的选择决定,这里我只选择类和内部类
在面板内选择,选择所有和单个文件,然后点击右侧 Safe delete 就可以完成删除,如果选择整个Unused declaration 会一次删除所有检查结果,但是不建议一次删除所有文件,还是每个类看一下,确定一下再删除,这样保险一点;
在 Safe delete 过程中,会发现有些类是还被使用着,这种情况是当前类的引用类,已经不再使用了,可以先删除引用类,但不清楚lint为什么没有直接把这些类检查出来;执行多次,可以更完整的检查,删除无效类;
删除Activity或者View后,可能会遗留xml和资源,然后再执行 unused resource ,删除资源文件;
第二步:拆分成工程内Module
- 文件移动:
- command + x
- command + v
- 方法移动:
- 方法上右键 -> Refactor -> Move;
- 弹出面板内,勾选方法依赖的其他方法或者变量;
- 输入目标类,移动即可;
- 子module内涉及资源 R.id 的 switch 判断需要修改为 if, 快捷键如下
- Alt + Enter 选择 Replace ‘switch’ with ‘if’
- ButterKnift,移动到子module后,需要使用ButterKnift生成的R文件
- 建议直接使用AS插件findViewByMe,自动生产findViewById,替换ButterKnift,还可以去掉一个依赖,减小包文件;
- 可以使用另外一个AS插件:RemoveButterKnife,可以自动移除ButterKnift,没在项目试过
- 先保证工程编译通过,R文件正常生成,否则每个文件都在报错,无法区分真实错误信息;
- 类文件移动过程中,不建议一次移动过多文件,否则编译出错,R文件丢失后,查找错误困难;移动关联的一部分代码,编译通过后,即可commit;
- 类文件移动过程中,可以先保持类文件的 package 不变,之后再做重构;
- layout.xml移动,内部依赖的自定义View需要同步移动;
- 文档的维护:功能模块,可能被多个业务模块所依赖,如果该模块要做重构,需要通知依赖方;
- 组件负责人
- 组件主要功能描述
- 组件的依赖方
- app + modules + library,module动态注册,可以去掉任何module;
- demo + module-x + library,通用demo;
- 动态初始化,通过注解,自动初始化module,提供优先级;
- Router规则:module-name://path
第三步:独立仓库,变成远程依赖
- 减轻业务模块负担,把功能模块独立出去,所谓功能模块,即非强业务耦合,比较独立或通用的功能;
- 所有 module 独立 git 仓库,组件提供远程依赖
- 提供统一的demo环境,方便组件快速开发,比如,空Activity+注册制的Fragment、获取登录信息等;