Skip to content
兮尘 edited this page Aug 22, 2021 · 13 revisions

前言

Component 是一个强大又灵活的框架. 主要分为 服务发现 和 路由两大模块

下面以 androidx 的 java8 版本为例讲解. 如果不是 Androidx 或者 java8 去掉相应的描述就好了

添加项目配置

1. 添加依赖

这个是框架的实现. 你只要保证想用的地方能引用到就好了. 但是我是基本放在 BaseModule 中的. 这样其他 Module 就都能引用到了

// Androidx + java8
implementation com.github.xiaojinzi123.Component:component-impl:v1.x.x-androidx-java8

// 非 Androidx + java8
// implementation com.github.xiaojinzi123.Component:component-impl:v1.x.x-java8
// Androidx + java7
// implementation com.github.xiaojinzi123.Component:component-impl:v1.x.x-androidx
// 非 Androidx + java7
// implementation com.github.xiaojinzi123.Component:component-impl:v1.x.x

2. 为每一个业务模块添加注解驱动器

请注意!!!! 这个是每一个业务模块都必须配置的!!!

在每一个业务模块的 build.gradle 中的 defaultConfig 中的代码块中加入如下配置

    defaultConfig {
        ......
        javaCompileOptions {
            annotationProcessorOptions {
                // 配置业务模块的模块名称, 当然你也可以自己写死某个字符串
                arguments = ["HOST": project.getName()]
            }
        }
    }

如果你的模块中配置了 Kotlin.

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
kapt {
    arguments {
        arg("HOST", project.getName())
        arg("Priority", "0")
    }
}
// 如果配置了 kotlin 
kapt com.github.xiaojinzi123.Component:component-compiler:1.x.x-androidx-java8 // 注意和上面依赖的版本号保持一致
// 如果没配置 Kotlin
annotationProcessor com.github.xiaojinzi123.Component:component-compiler:v1.x.x-androidx-java8 // 注意和上面依赖的版本号保持一致

3. 配置 Gradle 插件(如果你要手动加载模块, 可以跳过这个步骤)

Gradle 插件主要的作用就是后续加载模块的时候可以自动加载

项目根目录下build.gradle 中, 添加依赖:

buildscript {
    ......
    dependencies {
        ......
        classpath "com.github.xiaojinzi123.Component:component-plugin:v1.x.x-androidx-java8"  // 注意和上面依赖的版本号保持一致
    }		
}

然后在 appbuild.gradle 中应用这个插件

apply plugin: 'com.android.application'
apply plugin: 'com.xiaojinzi.component.plugin'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
......

4. 在 Application 中初始化

Component.init(BuildConfig.DEBUG, Config.with(this)
    // 表示是否采用 Gradle 插件配置的方式加载模块
    .optimizeInit(true)
    // 自动加载所有模块, 依赖上面的 optimizeInit(true)
    .autoRegisterModule(true)
    // 执行构建
    .build()
);
// 如果你没有配置 Gradle 插件, 你需要手动加载模块
// ModuleManager.getInstance().registerArr("module1", "module2", ......);

开始使用

路由

标记一个目标

@RouterAnno(
    host = "app", // host 是可选的,如果不写默认采用 build.gradle 中配置的 host
    path = "info"
)
public class InfoAct extends AppCompatActivity {
    // ......
}

@RouterAnno(
    // 这个就代表上面的两个属性. 但是最少得包含一个 /
    hostAndPath = "app/info"
)
public class InfoAct extends AppCompatActivity {
    ......
}

发起跳转

Router.with().hostAndPath("app/info").forward();

路由使用进阶

服务发现

BaseModule 中写一个接口

public interface Service1 {
    String test();
}

在业务模块中去实现它, 并用注解 @ServiceAnno 标记实现了哪个接口

@ServiceAnno(Service1.class)
public interface ServiceImpl1 implements Service1 {
    public String test() {
        return "hello world";
    }
}

使用它

// 寻找服务
Service1 service1 = ServiceManager.get(Service1.class)
// 调用方法
String content = service1.test()

更详细的 文档在这里

Clone this wiki locally