IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android组件化治理(一) -> 正文阅读

[移动开发]Android组件化治理(一)

本文对应的视频版本可以查看我的 bilibili 视频链接 《Android组件化治理(一)》,欢迎如果对您有帮助可以一键三连哦~

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
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:29:58  更:2022-05-05 11:31:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:39:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码