您的位置:首页 > 移动开发 > Android开发

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. 就是使用第三方的路由类库,比如ARouterActivityRouter等,但是学习成本高啊,至于用什么方法,请自行选择!

看看效果



代码链接

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 组件化