组件化demo

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不需要节点的描述
新建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地址 地址

你可能感兴趣的:(组件化demo)