前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android项目实战(四十八):架构之组件化开发

Android项目实战(四十八):架构之组件化开发

作者头像
听着music睡
发布2018-07-04 14:39:43
3370
发布2018-07-04 14:39:43
举报
文章被收录于专栏:Android干货Android干货

什么要组件化开发?

看一下普通项目的结构 , 一个项目下有多个Module(左侧图黑体目录),但是只有一个application,0个或多个library(在每个medel下的build.gradle文件下可以看到)。

代码语言:javascript
复制
apply plugin: 'com.android.application'

apply plugin: 'com.android.library'

这样架构的缺点:

1、每一次编译都是编译整个项目,项目大的时候编译几分钟几分钟的浪费

2、业务集中,修改一处可能需要注意别处会影响的部分,需要开发人员都尽可能的熟悉整个项目代码。

 组件化开发即:

 开发期间(组件模式),将每一个Module都作为一个application , 使其可以单独编译,运行。

 发布时(集成模式),只留一个application(app壳) , 其他的Module都作为library。

 组件化的优点:

 1、加快编译效率,单个组件可以单独编译,运行,不需要再每次都编译运行整个项目,大大减少开发时间。

 2、降低开发成员熟悉项目的成本,只需要熟悉负责模块的代码即可,不需要熟悉整个项目的代码。

 3、控制代码权限,开发人员只可以控制部分模块的代码,不会影响到他人的代码,提高整体开发效率。

 4、组件模式中,各个组件基本是相互独立的。

如何组件化开发?

一、组件模式和集成模式的转换

代码语言:javascript
复制
首先,Module分为两种类型:

1、application属性,可以独立运行的Android程序,通常是默认创建的app

apply plugin: ‘com.android.application’

2、library属性,不可以独立运行,一般是Android程序依赖的库文件

apply plugin: ‘com.android.library’

这两种类型可以在各个Module里面的build.gradle 文件中设置

 很显然,当组合模式开发的时候,每个组件设为application,集成模式的时候,只留一个application,其他都为library。

 方式知道了,接下来实现,当很少的每个组件的时候,我们可以手动控制每一个每个组件的类型,但是多了的情况下就显得很麻烦了。

 解决方式就是使用项目根目录下的gradle.properties文件,因为项目中所有的build.gradle文件都可以获取gradle.properties的常量,所以只需要写一个参数,例如:isModule = false (注意的是gradle.properties中所有的数据类型都是String)

 接下来除了壳组件的其他所有build.gradle里面只需要根据这个参数来控制类型即可:

代码语言:javascript
复制
if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

 经过上面的流程我们就可以很轻松的控制项目当前是集成模式还是组件模式。

二、AndroidManifest合并问题

相对于application和library对应的AndroidManifest文件内容是不同的,所以每一个组件需要根据当前是集成模式还是组件模式来动态的更换对应模式下的AndroidManifest.xml文件

所以我们只需给除了壳(一般是app目录)以外的其他组件的目录下再添加一个AndroidManifest.xml 文件  该文件写成 application对应的内容即可。

举例:

我们可以在组件目录下的main下添加一个module文件夹,添加一个application对应的AndroidManifest.xml

 这样对于一个组件,就有两个AndroidManifest.xml 文件了,一个内容对应application ,一个内容对应library

 接下来只需要和切换集成模式和组件模式一样,动态控制用哪一个即可。

 在组件下的build.gradle下添加代码:

代码语言:javascript
复制
  sourceSets {
        main {
            if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }

  注意application和library的AndroidManifest.xml 内容:

 application下的:

 library下的:

 -----------------------------------------------------------------------------------------------------------------------

 未完待续。。。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档