1. 环境准备
1.1创建相关组件
MainApp — app
Module A — LoginComponent Login组件
Module B — SearchComponent Search组件
BaseLibrary — ComponentLib 通讯库
1.2 配置gradle使相互依赖,为了让两个组件都可以作为library相互依赖
1.在gradle.properties中配置
#全局配置gradle环境
compile_sdk_version=28
min_sdk_version=21
target_sdk_version=28
support_version=28.0.0
constraint_layout=1.1.3
#配置某个组建是否可以独立运行
loginRunAlone=false
searchRunAlone=false
2.Login组件根据loginRunAlone判断LoginComponent是作为application还是libiary,如果是application,defaultConfig里面存在applicationId的选择(Search组件一样的逻辑)
if (loginRunAlone.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
.....
defaultConfig {
if (loginRunAlone.toBoolean()) {
applicationId "com.example.logincomponent"
}
.....
}
.....
}
3.相互依赖
image.png
在MainApp依赖ModuleA和ModuleB时,若A/B为application,则不能依赖,所以在MainApp的build.gradle中
dependencies {
....
implementation project(':componentlib')
if (!loginRunAlone.toBoolean()){
implementation project(':logincomponent')
}
if (!searchRunAlone.toBoolean()){
implementation project(':searchcomponent')
}
}
4.配置组件 AndroidManifest.xml
作为一个application和一个library,AndroidManifest.xml是不一样的,library不需要<application>节点的描述
新建manifest文件夹,copy AndroidManifest.xml到文件夹内作为application的AndroidManifest.xml。外面的AndroidManifest.xml作为library的AndroidManifest.xml,删除不需要的内容
在build.gradle中配置
defaultConfig {
.....
}
sourceSets {
main {
//独立运行与集成调试时使用不同的 AndroidManifest.xml 文件
if (loginRunAlone.toBoolean()) {
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
buildTypes {
....
}
image.png
1. 代码实现通讯
demo地址 地址