DDComponentForAndroid

Introduction: 一套完整有效的 android 组件化方案,支持组件的组件完全隔离、单独调试、集成调试、组件交互、UI 跳转、动态加载卸载等功能
More: Author   ReportBugs   
Tags:

PRs Welcome License

实现功能:

  • 组件可以单独调试
  • 杜绝组件之前相互耦合,代码完全隔离,彻底解耦
  • 组件之间通过接口+实现的方式进行数据传输
  • 使用 scheme 和 host 路由的方式进行 activity 之间的跳转
  • 自动生成路由跳转路由表
  • 任意组件可以充当 host,集成其他组件进行集成调试
  • 可以动态对已集成的组件进行加载和卸载
  • 支持 kotlin 组件

使用指南

1、主项目引用编译脚本

在根目录的 gradle.properties 文件中,增加属性:

mainmodulename=app

其中 mainmodulename 是项目中的 host 工程,一般为 app

在根目录的 build.gradle 中增加配置

buildscript {
    dependencies {
        classpath 'com.luojilab.ddcomponent:build-gradle:1.2.0'
    }
}

为每个组件引入依赖库,如果项目中存在 basiclib 等基础库,可以统一交给 basiclib 引入

compile 'com.luojilab.ddcomponent:componentlib:1.3.0'

2、拆分组件为 module 工程

在每个组件的工程目录下新建文件 gradle.properties 文件,增加以下配置:

isRunAlone=true
debugComponent=sharecomponent
compileComponent=sharecomponent

上面三个属性分别对应是否单独调试、debug 模式下依赖的组件,release 模式下依赖的组件。具体使用方式请解释请参见上文第二篇文章

3、应用组件化编译脚本

在组件和 host 的 build.gradle 都增加配置:

apply plugin: 'com.dd.comgradle'

注意:不需要在引用 com.android.application 或者 com.android.library

同时增加以下 extension 配置:

combuild {
    applicationName = 'com.luojilab.reader.runalone.application.ReaderApplication'
    isRegisterCompoAuto = true
}

组件注册还支持反射的方式,有关 isRegisterCompoAuto 的解释请参见上文第二篇文章

4、混淆

在混淆文件中增加如下配置

-keep interface * {
  <methods>;
}
-keep class com.luojilab.component.componentlib.** {*;}
-keep class com.luojilab.router.** {*;}
-keep class com.luojilab.gen.** {*;}
-keep class * implements com.luojilab.component.componentlib.router.ISyringe {*;}
-keep class * implements com.luojilab.component.componentlib.applicationlike.IApplicationLike {*;}

关于如何进行组件之间数据交互和 UI 跳转,请参看 Wiki

组件化讨论群

DDComponent 的讨论群,群号 693097923,欢迎大家加入:

进群请扫码

License

Copyright 2017 Luojilab

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea