美文网首页
Android组件化开发

Android组件化开发

作者: perry_Fan | 来源:发表于2018-05-14 21:50 被阅读0次

    1. 什么是组件化开发呢?

    在项目开发中,会将公用的代码提取出来制作基础库Base Module,将某些单独的功能封装到Library module中,更具业务来划分module。
    组件:指的是单一的功能组件,如视频组件(VideoSDK)、支付组件(PaySDK)、路由组件(Router)等,每个组件都能单独抽出来制作成SDK。
    模块:指的是业务模块(LiveModule)、首页模块(HomeModule)、即时通信模块(IMModule)等。模块相对于组件来说粒度更大,模块可能包含多种不同的组件。

    1.1 组件化开发有什么好处?

    1)避免重复造轮子,可以节省开发和维护的成本。
    2)可以通过组件和模块为业务基准合理地安排人力,提高开发效率。
    3)不同的项目可以公用一个组件或模块,确保整体技术方案的一致性。
    4)为未来插件化共用一套底层模型做准备。

    1.2 模块化开发的好处?

    1)业务模块解耦,业务移植更加简单。
    2)多团队根据业务内容进行并行开发和测试。
    3)单个业务可以单独编译打包,加快编译速度。
    4)多个app共用模块,降低了研发和维护的成本。

      组件化和模块化都是为了代码重用和业务解耦。区别在于模块化是业务导向,组件化是功能导向。
      项目体积越来越大后,必定会有超过65536的一天,要么选择multidex的方式分包解决,要么使用插件化的方式来完成项目。
      组件化和模块化的划分可以更好地为项目插件化开路,插件化的模块化发布和正常发布有着非常大的差异,已经脱离了组件化和模块化的构建机制,插件化拥有更高效的业务解耦。

    1.1.3 基础组件架构介绍

    分为应用层、组件层和基础层。
    1)基础层:包含一些基础库和对基础库的封装,包括图片加载、网络加载、数据存储等。
    2)组件层:包含一些简单的业务,比如登陆、数据观看、图片浏览等。
    3)应用层用于统筹全部组件,并输出生成app。

    1.2.1 依赖

      Android Studio 独有设计—— module依赖。
      module 的依赖包括对第三方库的依赖,也包含对其他module的依赖。通过依赖我们可以访问第三方和其他被依赖Module的代码和资源。
    三种基本的依赖方式:
    1)Jar dependency:通过Gradle配置引入lib文件夹中的所有.jar后缀的文件,还能引用.aar后缀的文件。
    2)Base module:相当于一个基础模块库(lib module)来作为依赖,对应的是module dependency,实质上是将其打包成aar文件,方便其他库进行依赖。
    3)第三方依赖通过library dependency 完成仓库索引依赖,这里的仓库可以配置为网络库和本地库。

    1.2.2 聚合和解耦合

    依赖 -> 关系

      有了依赖才能产生关系。一个工程体系我们可以想象成一个群体,如果一个群体中的每个个体彼此都非常陌生,没有沟通,没有关系,那么将无法发挥每个个体的最大能力,所以我们需要为个体提供沟通交流的渠道。

      我们在实践中也应当为替换或移除某个个体的行为付出最少代价的方案。

    关系 -> 解耦

      既然需要解耦,需要设计更加适合交流沟通的系统,也可以考虑为一个群体设计更加适合的交流沟通的方式。
      聚合和解耦是项目架构的基础。架构工程就是一个群体集合,如何让每个个体产生最大的作用;如何让个体间的交流通畅来如何让每个个体付出最小的消耗来完成任务,并获得最大的集体利益;如何统筹更大规模的集体。

    1.3 重新认识 AndroidManifest

      由于每个工程都会接触到AndroidManifest.xml项目配置文件,说明了其重要性。每个module都有一份配合的AndroidManifest文件来记载其信息,最终生成一个APP的时候,如何记录多个module独立的配置信息呢?答案就是将多个AndroidManifest合成一个,那么冲突将如何解决呢?
      首先,Application module(主工程)依赖多个lib module(功能module)如下:

    dependencies {
          compile project(':news')
          compile project(':web')
          compile project(':submit')
          annotationProcessor 'com.alibaba:arouter-compiler:1.1.1'
    }
    

      当编译主module时会将这些功能module重新编译,然后将成果(aar)放到主module的intermidates文件夹中

    。。。待续

    相关文章

      网友评论

          本文标题:Android组件化开发

          本文链接:https://www.haomeiwen.com/subject/ijaddftx.html