Android知识体系梳理笔记四:组件化开发学习笔记
2017-08-22 14:14
513 查看
组件化开发总体展示
什么是组件化
基于组件的软件工程(CBSE),也称为基于组件的开发(CBD),是软件工程的一个分支在整个给定的软件系统中,对整个系统中的各个功能模块进行分离,每个模块都是一个Module,都是可单独运行的APP
开发期,每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署
一个复杂完整的系统项目的构建最后就是各个组件集成的结果
组件化开发模块图
主APP为各组件的入口(主工程也被称之为壳程序).
这些module或以jar的形式呈现,或以aar的形式呈现.主工程通过依赖的方式使用组件所提供的功能(集成后).并行开发时为单独的可编译的module
公用组件为我们的工具类库,包含了一些联网请求工具类,继承application的BaseAPPlication等
优缺点展示
优点每个组件都有自己独立的版本,可以独立的编译,测试,打包和部署
能够实现完整意义上的按需求进行产品配置和销售,用户可以选择使用那些组件,组件之间可以灵活的组建.
并行开发,提高开发效率
缺点
组件化的实施对开发人员和团队管理者提出了更高水平的要求
要求开发人员对业务有更深层次上的理解.
需要填几个坑
填坑+进行组件化开发
有了模块图就很简单了,我们照着模块图做就行了,建一个主APP壳,建一个公共基础类库,把我们的工具类什么的往里一扔,然后大家一起各写各的业务module;但是还有几个坑需要填一下。* 首先统一组件之间的版本以及依赖的第三方库版本,在主项目的根目录下的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的使用:
统一使用基础库的单例BaseApplication
反射ActivityThread
组件间通信
对于组件间通信,大体上就是UI跳转和 进行数据传递,算是有两种方案1. 就是通过包名显示跳转
Intent intent = new Intent(baseMyContext,Class.forName("com.example.module2.MainActivity")); intent.putExtra("app","来自主APP"); startActivity(intent);
通过这样的方式我们可以自己添加一个基础类库(路由),管理我们的页面跳转,维护一个包含所有类名的工具类!虽然麻烦,但是简单,学习成本低。然后用RxBus进行数据回传通知,我的module里用的就是这种方式!
2. 就是使用第三方的路由类库,比如ARouter,ActivityRouter等,但是学习成本高啊,至于用什么方法,请自行选择!
看看效果
代码链接
拼搏在技术道路上的一只小白And成长之路
相关文章推荐
- Android知识体系梳理笔记五:Kotlin学习笔记一:类和继承以及Anko(全)的基本使用
- 《Android 开发艺术探索》——View 事件体系--View基础知识 (学习笔记)
- Android知识体系梳理笔记五:Kotlin学习笔记二:空安全,操作符,Lambad表达式...
- 【Android开发新手的学习笔记】异步加载知识梳理
- Android开发学习笔记--基础知识(一)
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android知识体系梳理笔记二:AIDL进阶之Binder机制
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记(转)
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android Map开发基础知识学习笔记
- Android知识体系梳理笔记一:Android跨进程通信:AIDL
- daliu_IT学习Android笔记第三篇--学习android开发需要什么知识基础?