2022,致力于做行业资讯、优秀的短信网站导航平台!
本站收录相关网址皆来源于网络,欢迎广大用户反馈问题网站,本站将第一时间清理!并且提醒大家!
手机短信验证码_语音验证码平台_接码网站-爱码网
当前位置: 首页 > 语音通知 >

安卓架构之Android 模块化/模块化探索与实践

时间: 2020-02-09 22:17 来源: 未知 作者: 1 点击:
安卓架构之Android 模块化/模块化探索与实践 一、前语万维网发明人 Tim Berners-Lee 谈到规划原理时说过:简略性和模块化是软件工程的柱石;分布式和容错性是互联网的生命。 由此可见模

安卓架构之Android 模块化/模块化探索与实践

一、前语万维网发明人 Tim Berners-Lee 谈到规划原理时说过:“简略性和模块化是软件工程的柱石;分布式和容错性是互联网的生命。” 由此可见模块化之于软件工程范畴的重要性。从 2016 年开端,模块化在 Android 社区越来越多的被提及。跟着移动渠道的不断发展,移动渠道上的软件渐渐走向杂乱化,体积也变得臃肿巨大;为了下降大型软件杂乱性和耦合度,一起也为了习惯模块重用、多团队并行开发测验等等需求,模块化在 Android 渠道上变得势在必行。阿里 Android 团队在年初开源了他们的容器化结构 Atlas 就很大程度阐明了当时 Android 渠道开发大型商业项目所面对的问题。二、什么是模块化那么什么是模块化呢?《 Java 运用架构规划:模块化形式与 OSGi 》一书中对它的界说是:模块化是一种处理杂乱体系分解为更好的可办理模块的办法。上面这种描绘过分生涩难明,不行直观。下面这种类比的办法则可能加简略了解。我们能够把软件看做是一辆轿车,开发一款软件的进程就是出产一辆轿车的进程。一辆轿车由车架、发动机、变数箱、车轮等一系列模块组成;相同,一款大型商业软件也是由各个不同的模块组成的。轿车的这些模块是由不同的工厂出产的,一辆 BMW 的发动机可能是由坐落德国的工厂出产的,它的主动变数箱可能是 Jatco(国际三大变速箱厂商之一)坐落日本的工厂出产的,车轮可能是我国的工厂出产的,终究交给华晨宝马的工厂一致组装成一辆完好的轿车。这就相似于我们在软件工程范畴里说的多团队并行开发,终究将各个团队开发的模块一致打包成我们可运用的 App 。一款发动机、一款变数箱都不行能只运用于一个车型,比方同一款 Jatco 的 6AT 主动变速箱既可能被安装在 BMW 的车型上,也可能被安装在 Mazda 的车型上。这就好像软件开发范畴里的模块重用。到了冬季,特别是在北方我们可能需求开着车走雪路,为了安全起见往往我们会将轿车的公路胎晋级为雪地胎;轮胎能够很简略的替换,这就是我们在软件开发范畴谈到的低耦合。一个模块的晋级替换不会影响到其它模块,也不会受其它模块的约束;一起这也相似于我们在软件开发范畴说到的可插拔。三、模块化分层规划上面的类比很明晰的阐明的模块化带来的优点:多团队并行开发测验;模块间解耦、重用;可独自编译打包某一模块,提高开发功率。在《安居客 Android 项目架构演进》这篇文章中,我介绍了安居客 Android 端的模块化规划方案,这儿我仍是拿它来举例。但首要要对本文中的组件和模块做个差异界说组件:指的是单一的功用组件,如地图组件(MapSDK)、付出组件(AnjukePay)、路由组件(Router)等等;模块:指的是独立的事务模块,如新房模块(NewHouseModule)、二手房模块(SecondHouseModule)、即时通讯模块(InstantMessagingModule)等等;模块相关于组件来说粒度更大。具体规划方案如下图:整个项目分为三层,从下至上分别是: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 为后缀。如下图所示:关于模块化项目,每个独自的 Business Module 都能够独自编译成 APK。在开发阶段需求独自打包编译,项目发布的时分又需求它作为项目的一个 Module 来全体编译打包。简略的说就是开发时是 Application,发布时是 Library。因而需求在 Business Module 的 build.gradle 中参加如下代码:if(isBuildModule.toBoolean()){ apply plugin:'com.android.application'}else{ apply plugin:'com.android.library'}isBuildModule 在项目根目录的 gradle.properties 中界说:isBuildModule=false相同 Manifest.xml 也需求有两套:sourceSets { main { if(isBuildModule.toBoolean()) { manifest.srcFile'src/main/debug/AndroidManifest.xml' }else{ manifest.srcFile'src/main/release/AndroidManifest.xml' } }}debug 形式下的 AndroidManifest.xml : ... > android:name="com.baronzhang.android.newhouse.NewHouseMainActivity" android:label="@string/new_house_label_home_page"> android:name="android.intent.action.MAIN"/>

------分隔线----------------------------
日常分享