Andriod 组件化实用技巧

第一步:拆分前清理无用文件

组件化拆分代码前,最好做一次lint检查,主要删除无用代码和资源。避免组件独立成git仓库后,因调用关系不完整,静态检查可能出现更多误判,而且删除无效资源和代码,可以减轻一部分拆分工作量。

很早之前在eclipse用过UCDetector,非常有效,记忆犹新。
在Android Studio下,可以使用AS自动工具,Analyze -> Inspect Code,检查某个目录代码。
也可以使用 Lint 检查: Analyze -> Run Inspection By Name -> 输入检查项。
例如 Unused declaration | unused resource,检查无用资源。
  1. Analyze –> Run inspection by name –> 输入 Unused declaration 检查无效类、方法、变量等,通过面板勾选,根据自己的选择决定,这里我只选择类和内部类

  2. 在面板内选择,选择所有和单个文件,然后点击右侧 Safe delete 就可以完成删除,如果选择整个Unused declaration 会一次删除所有检查结果,但是不建议一次删除所有文件,还是每个类看一下,确定一下再删除,这样保险一点;
    在 Safe delete 过程中,会发现有些类是还被使用着,这种情况是当前类的引用类,已经不再使用了,可以先删除引用类,但不清楚lint为什么没有直接把这些类检查出来;

  3. 执行多次,可以更完整的检查,删除无效类;

  4. 删除Activity或者View后,可能会遗留xml和资源,然后再执行 unused resource ,删除资源文件;

第二步:拆分成工程内Module

  1. 文件移动:
    1. command + x
    2. command + v
  2. 方法移动:
    1. 方法上右键 -> Refactor -> Move;
    2. 弹出面板内,勾选方法依赖的其他方法或者变量;
    3. 输入目标类,移动即可;
  3. 子module内涉及资源 R.id 的 switch 判断需要修改为 if, 快捷键如下
    1. Alt + Enter 选择 Replace ‘switch’ with ‘if’
  4. ButterKnift,移动到子module后,需要使用ButterKnift生成的R文件
    1. 建议直接使用AS插件findViewByMe,自动生产findViewById,替换ButterKnift,还可以去掉一个依赖,减小包文件;
    2. 可以使用另外一个AS插件:RemoveButterKnife,可以自动移除ButterKnift,没在项目试过
  5. 先保证工程编译通过,R文件正常生成,否则每个文件都在报错,无法区分真实错误信息;
  6. 类文件移动过程中,不建议一次移动过多文件,否则编译出错,R文件丢失后,查找错误困难;移动关联的一部分代码,编译通过后,即可commit;
  7. 类文件移动过程中,可以先保持类文件的 package 不变,之后再做重构;
  8. layout.xml移动,内部依赖的自定义View需要同步移动
  9. 文档的维护:功能模块,可能被多个业务模块所依赖,如果该模块要做重构,需要通知依赖方;
    1. 组件负责人
    2. 组件主要功能描述
    3. 组件的依赖方
  10. app + modules + library,module动态注册,可以去掉任何module;
  11. demo + module-x + library,通用demo;
  12. 动态初始化,通过注解,自动初始化module,提供优先级;
  13. Router规则:module-name://path

第三步:独立仓库,变成远程依赖

  1. 减轻业务模块负担,把功能模块独立出去,所谓功能模块,即非强业务耦合,比较独立或通用的功能;
  2. 所有 module 独立 git 仓库,组件提供远程依赖
  3. 提供统一的demo环境,方便组件快速开发,比如,空Activity+注册制的Fragment、获取登录信息等;