作家
登录

Android模块化探索与实践

作者: 来源: 2017-05-18 13:03:07 阅读 我要评论

媒介

Android模块化摸索与实践

万维网创造人 Tim Berners-Lee 谈到设计道理时说过:“简单性和模块化是软件工程的基石;分布式和容错性是互联网的生命。” 由此可见模块化之于软件工程范畴的重要性。

大年夜 2016 年开端,模块化在 Android 社区越来越多的被说起。跟着移动平台的赓续成长,移动平滔喔赡软件慢慢走向复杂化,体积也变得痴肥宏大年夜;为了降低大年夜型软件复杂性和耦合度,同时也为了适应模块重用、多团队并行开辟测试等等需求,模块化在 Android 平台上变得势在必行。阿里 Android 团队在岁首?年代开源了他们的容器化框架 Atlas 就很大年夜程度说清楚明了当前 Android 平台开辟大年夜型贸易项目所面对的问题。

什么是模块化

对于多个 Bussines Module 中资本名冲突的问题,可以经由过程在 build.gradle 定义前缀的方法解决:

那么什么是模块化呢?《 Java 应用架构设计:模块化模式与 OSGi 》一书中对它的定义是:模块化是一种处理复杂体系分化为更好的可治理模块的方法。

膳绫擎这种描述太过生涩难解,不敷直不雅。下面这种类比的方法则可能加轻易懂得。

我们可以把软件看做是一辆汽车,开辟一款软件的过程就是临盆一辆汽车的过程。一辆汽车由车架、发念头、变数箱、车轮等一系列模块构成;同样,一款大年夜型贸易软件也是由各个不合的模块构成的。

一款发念头、一款变数箱都弗成能只应用于一个车型,比如同一款 Jatco 的 6AT 主动变速箱既可能被安装在 BMW 的车型上,也可能被安装在 Mazda 的车型上。这就如同软件开辟范呈攀里的模块重用。

到了冬天,特别是在北方我们可能须要开着车走雪路,为了安然起见往往我们会将汽车的公路胎进级为雪地胎;轮胎可以很随便马虎的改换,这就是我们在软件开辟范畴谈到的低耦合。一个模块的进级调换不会影响到其它模块,也不会受其它模块的限制;同时这也类似于我们在软件开辟范畴提到的可插拔。

模块化分层设计

膳绫擎的类比很清楚的解释的模块化带来的好处:

  • 多团队并行开辟测试;
  • 模块间解耦、重用;
  • 可零丁编译打包某一模块,晋升开辟效力。

在《安居客 Android 项目架构演进》这篇文┞仿中,我介绍了安居客 Android 端的模块化设计筹划,这里我照样拿它来举例。但起重要对本文中的组件和模块做个差别定义

  • 组件:指的是单一的功能组件,如地图组件(MapSDK)、付出组件(AnjukePay)、路由组件(Router)等等;
  • 模块:指的是自力的营业模块,如新房模块(NewHouseModule)、二手房模块(SecondHouseModule)、即时通信模块(InstantMessagingModule)等等;模块相对于组件来说粒度更大年夜。

反复依附

具体设计筹划如下图:

Android模块化摸索与实践

全部项目分为三层,大年夜下至上分别是:

  • Basic Component Layer: 基本组件层,顾名思义就是一些基本组件,包含了各类开源库以及和营业无关的各类自研对象库;
  • Business Component Layer: 营业组件层,这一层的所有组件都是营业相干的,例如上图中的付出组件 AnjukePay、数据模仿组件 DataSimulator 等等;
  • Business Module Layer: 营业 Module 层,在 Android Studio 中每块营业对应一个零丁的 Module。例如安居客用户 App 我们就可以拆分成新房 Module、二手房 Module、IM Module 等等,每个零丁的 Business Module 都必须准遵守我们本身的 MVP 架构。

我们在谈模块化的时刻,其实就是将营业模块层的各个功能营业拆分层自力的营业模块。所以我们进行模块化的第一步就是营业模块划分,然则模块划分并没有一个业界通用的标准,是以划分的粒度须要根据项目情况进行合理把控,这就须要对营业和项目有较为透辟的懂得。拿安居客来举例,我们会将项目划分为新房模块、二手房模块、IM 模块等等。

每个营业模块在 Android Studio 中的都是一个 Module ,是以在定名方面我们请求每个营业模块都以 Module 为后缀。如下图所示:

Android模块化摸索与实践

对于模块化项目,每个零丁的 Business Module 都可以零丁编译成 APK。在开辟阶段须要零丁打包编译,项目宣布的时刻又须要它作为项目标一个 Module 来整体编译打包。简单的说就是开辟时是 Application,宣布时是 Library。是以须要在 Business Module 的 build.gradle 中参加如下代码:

  1. if(isBuildModule.toBoolean()){ 
  2.     apply plugin: 'com.android.application' 
  3. }else
  4.     apply plugin: 'com.android.library' 

isBuildModule 在项目根目次的 gradle.properties 中定义:

  1. > isBuildModule=
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      红帽张先民博士:开源驱动企业数字化转型

    【51CTO.com原创稿件】提到Linux,我们就会想到红帽,就跟提到Windows就会想到微软一样。作为一家专注于架构平>>>详细阅读


    本文标题:Android模块化探索与实践

    地址:http://www.17bianji.com/lsqh/35300.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)