一根业务总线讲所有组件个串联起来,其中组件总线相当于主工程(壳工程mudule),而业务组件相当于工程中(mudule/library)
主工程(壳工程mudele):主要负责事情不塞入任何具体业务逻辑,主要用于使用组合业务组件、初始化配置和发布应用配置等操作。
组件(module/library):主要实现具体业务逻辑,尽可能保证业务独立性,例如现在手淘这样一个大型的app几乎每个bu功能块都能够拿出来作为一个独立业务app。但是没有这么大型也可以按照小一些的业务逻辑来区分组件,例如:购物车组件、收银台组件、用户中心组件等,具体更具自己的项目需要来划分。
公共库(library):公共使用的工具类、sdk等库,例如eventbus、xutils、rxandroid、自定义工具类等等,这些库可以做成一个公共common sdk、也可以实现抽离很细按照需求依赖使用。
他们之间的关系则是 主工程依赖组件、组件依赖公共库。
可能出现的问题及解决方案
module与library之间的切换
1.1 在gradle.properties文件中配置一个isPlugin属性 isPlugin=false 然后在业务组件的build.gradle中读取 isPlugin
(ps:gradle.properties 中的数据类型都是String类型,使用其他数据类型需要自行转换)
//toboolean方法是将string数据转换成boolean数据的方法
if (isPlugin.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
1.2 library是不需要包名的 所以需要对这个判断处理 也是在build.gradle中进行配置
defaultConfig {
if (isPlugin.toBoolean()){
applicationId 'com.example.rspluginmodule'
}
....
}
1.3 修改AndroidManifest.xml,因为library、module的主配置文件是有区别
在main文件家中创建release文件夹然后拷贝一份AndroidManifest.xml进入release文件夹,那么发布模式下使用的就是release文件夹下面的AndroidManifest.xml,而开发模式下用的就是默认的AndroidManifest.xml,这样就要对release文件夹下面的AndroidManifest.xml进行修改因为开发模式下release文件夹下面是用来给library使用的。
最后在build.gradle中进行配置
sourceSets {
main {
if (isPlugin.toBoolean()){
manifest.srcFile 'src/main/AndroidManifest.xml'
}else {
manifest.srcFile 'src/main/release/AndroidManifest.xml'
}
}
}
业务组件间的相互跳转 可以使用隐式意图筛选器
组件间的通讯问题 因为是不同的module属于不同的线程 所以需要使用到aidl 跨进程通信