Android知识体系梳理笔记四:组件化开发学习笔记

组件化开发总体展示

什么是组件化
  • 基于组件的软件工程(CBSE),也称为基于组件的开发(CBD),是软件工程的一个分支
  • 在整个给定的软件系统中,对整个系统中的各个功能模块进行分离,每个模块都是一个Module,都是可单独运行的APP
  • 开发期,每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署
  • 一个复杂完整的系统项目的构建最后就是各个组件集成的结果
组件化开发模块图

这里写图片描述

  • 主APP为各组件的入口(主工程也被称之为壳程序).
  • 这些module或以jar的形式呈现,或以aar的形式呈现.主工程通过依赖的方式使用组件所提供的功能(集成后).并行开发时为单独的可编译的module
  • 公用组件为我们的工具类库,包含了一些联网请求工具类,继承application的BaseAPPlication等
优缺点展示
  1. 优点
    • 每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署
    • 能够实现完整意义上的按需求进行产品配置和销售,用户可以选择使用那些组件,组件之间可以灵活的组建.
    • 并行开发,提高开发效率
  2. 缺点
    • 组件化的实施对开发人员和团队管理者提出了更高水平的要求
    • 要求开发人员对业务有更深层次上的理解.
    • 需要填几个坑
填坑+进行组件化开发

有了模块图就很简单了,我们照着模块图做就行了,建一个主APP壳,建一个公共基础类库,把我们的工具类什么的往里一扔,然后大家一起各写各的业务module;但是还有几个坑需要填一下。
image
* 首先统一组件之间的版本以及依赖的第三方库版本,在主项目的根目录下的build.gradle下配置。
这里写图片描述
这样使用,在各个组件的build.gradle下配置。

compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
....

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    def system_compile = rootProject.ext.systemSupport
    compile system_compile.appcampatV7
    compile system_compile.constraintlayout
    compile system_compile.recyclerview_v7
    compile system_compile.design
    compile system_compile.support_v4
    compile system_compile.glide
    compile project(':resource')
    testCompile 'junit:junit:4.12'
}
  • 在开发期间组件作为APP单独运行调试,在集成以作为Lib库运行,这是由一个布尔变量控制,在根目录下的build.gradle里定义一个变量isBuildApp(上面截图里有)!
isBuildApp=false;//false:作为Lib组件存在, true:作为application存在

然后再各个组件里使用进行判断到底是lib组件,还是单独运行的APP
这里写图片描述
* library与application运行时需要manifest清单文件,依然根据isBuildApp判断,在组件的build.gradle下的Android模块里配置

 //根据isBuildApp加载不同版本的清单文件
    sourceSets{
        main{
            if(rootProject.ext.isBuildApp){
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }else{
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
                java{
                    exclude 'debug/**'
                }
            }
        }
    }

ps1:要想此编译通过,需要在同步之前在该module下新建两个文件夹,看下图
这里写图片描述

里面清单文件的代码看我Github

  • 资源名重名

对于xml文件,可以在组件的build.gradle下配置

resourcePrefix "login_"

进行强制检测xml是否重名,但是并不能限定图片资源,所有图片资源仍然需要你手动去修改资源名。若这样还是感觉麻烦的话,可以把图片资源放到基础库里,进行引用!
* application的使用:

  1. 统一使用基础库的单例BaseApplication
  2. 反射ActivityThread
组件间通信

对于组件间通信,大体上就是UI跳转和 进行数据传递,算是有两种方案
1. 就是通过包名显示跳转

 Intent intent = new Intent(baseMyContext,Class.forName("com.example.module2.MainActivity"));
    intent.putExtra("app","来自主APP");
    startActivity(intent);

通过这样的方式我们可以自己添加一个基础类库(路由),管理我们的页面跳转,维护一个包含所有类名的工具类!虽然麻烦,但是简单,学习成本低。然后用RxBus进行数据回传通知,我的module里用的就是这种方式!
2. 就是使用第三方的路由类库,比如ARouterActivityRouter等,但是学习成本高啊,至于用什么方法,请自行选择!

看看效果

这里写图片描述

代码链接

拼搏在技术道路上的一只小白And成长之路

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值