Android组件化治理组件依赖管理

Posted Chiclaim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android组件化治理组件依赖管理相关的知识,希望对你有一定的参考价值。

背景

随着项目的不断迭代重构,项目的组件数量越来越多,这样会引发两个比较直接的问题:

  • 编译速度慢
  • 开发效率变低
    • 编译速度
    • 组件数量过大,开发体验不佳
    • 添加新组建不方便
    • 调试底层组件不方便

问题描述

问题一:编译速度慢

解决方案:考虑将源码依赖改成 AAR 依赖

既然有两种形态(AAR和源码),那么肯定需要开关来控制,类似如下伪代码:

if(ModuleA_ImportSource)
  implementation project(":ModuleA")
 else 
  implementation 'xxx_group:ModuleA:1.0.0'

这样会存在两个问题:

  • 如果组件个数很多,那么组件开关也会很多,因为是一对一关系。
  • 需要组件的地方都会大量充斥着类似上面的模板代码,如果后期需要修改,要修改多个地方,不方便统一管理。

问题二:组件数量过大,开发体验不佳

随着时间的推移,项目组件的数量会越来越多,通常 androidStudio 左侧满屏是展示不全所有组件的,需要滑动鼠标。

在绝大多数迭代的时候一般只会改动 2-3 个组件,其余的组件不会修改,有时候需要去寻找特定的组件。

解决方案:那能不能不修改的组件,不在 AndroidStudio 中展示,只展示你需要修改的组件。

问题三:调试底层组件不方便

”调试底层组件不方便“ 和 ”添加新组建不方便“ 可以归为一类问题。

一般底层的组件,如工具组件:UtilsModule。这样的组件一般长期不会修改,所以不会将源码引入到 AndroidStudio 中(如果业务组件100多个,还有自己各种封装的组件全都展示的话,AS需要展示的组件就会非常多,相当于你进入了一个文件夹,里面有几百个文件夹,然后你需要在里面找组件,是非常痛苦的一件事情),我们会将它像第三方库一样通过 AAR 引入进来。但是有时候又需要在该组件中添加新工具类或者修复 bug。此时需要修改两个地方:

  • git clone UtilsModule 代码,然后修改 settings.gradle 文件,这样 UtilsModule 才会在 AS 中展示

  • 所有依赖 UtilsModule 的地方全部改成源码依赖(可能存在很多地方,如果改的不全,就会存在某组件对 UtilsModule 是源码依赖,另一个组件对 UtilsModule 是 AAR 依赖的情况)。

  • 上线后又得将上面的配置全部去掉,整个过程下来非常不方便。

解决方案

开发一个 gradle plugin 插件,用于管理组件之间的依赖。

实现的主要功能有:

  • 实现组件源码与 AAR 的自由切换
  • AS只展示源码依赖的组件
  • 避免组件开关模板代码
  • 能够对依赖动态替换
  • 方便新组件添加
  • 方便底层组件调试

最终结果

  • AS只展示需要修改的组件,如下图所示:

  • 对所有组件的管理,都不需要修改 gradle 配置文件,只需要修改对应的组件的manifest清单文件:


  "modules": [
    
      "git": "git@your_git_url.git",
      "moduleName": "LibBase",
      "version": "5.9.23",
      "importSource": false
    ,
    
      "git": "git@your_git_url.git",
      "moduleName": "LibFormPageWidgets",
      "version": "5.9.21",
      "importSource": false
    
  ]

属性描述:

  • importSource: 用于是源码还是AAR依赖
  • moduleName: 组件名称,同时也是maven artifactId
  • version: AAR的版本信息
  • groupId: maven的group

以上是关于Android组件化治理组件依赖管理的主要内容,如果未能解决你的问题,请参考以下文章

Android组件化治理组件代码管理

Android组件化治理组件代码管理

Android组件化治理组件代码管理

Android组件化和插件化开发

Android组件化和插件化开发

React Native的生命周期解析