组件化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不需要<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地址 地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容