![logo][logo]

## 关于

组件化开发会涉及到模块与模块之间相互调用，而各模块之间又是解偶的，所以就产生了很多路由方案，或者是把接口下沉到 `base` 组件中，但在 **[StaticBus][bus]** 看来，它们都略显复杂，**[StaticBus][bus]** 只需调用一个静态函数便可自由穿梭于各个模块，就像一辆巴士，由于是基于静态函数来实现，所以称她为 **[StaticBus][bus]**，如今已支持 Kotlin。


## 基本使用

在项目根目录的 `build.gradle` 中添加 `bus` 插件：

```groovy
buildscript {
    dependencies {
        ...
        classpath 'com.blankj:bus-gradle-plugin:1.8'
    }
}
```

然后在 application 模块中使用该插件：

```groovy
apply plugin: "com.blankj.bus"
```

给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖：

```groovy
api "com.blankj:utilcode:1.24.2"
```

比如 module0 中存在的 `Module0Activity.java`，我们通常都是在它内部写一个 `start` 函数来启动它，现在我们给它添加 `@BusUtils.Subscribe` 注解，并给注解的 `name` 赋唯一值，要注意，函数务必要 `public static` 哦：

```java
// java
public class Module0Activity extends Activity {

    @BusUtils.Subscribe(name = "startModule0")
    public static boolean start(Context context, String name, int age) {
        Intent starter = new Intent(context, Module0Activity.class);
        starter.putExtra("name", name);
        starter.putExtra("age", age);
        context.startActivity(starter);
        return true;
    }
}

// kotlin
class Module0Activity : Activity() {

    companion object {
        @BusUtils.Subscribe(name = "startModule0")
        fun start(context: Context, name: String, age: Int): Boolean {
            val starter = Intent(context, Module0Activity::class.java)
            starter.putExtra("name", name)
            starter.putExtra("age", age)
            context.startActivity(starter)
            return true
        }
    }
}
```

在其他模块通过 `BusUtils.post("startModule0", Context, String, int)` 即可访问到它，一定要注意 `name` 之后的参数顺序和个数一定要和前面声明的函数相一致，其返回值也就是前面函数的返回值：

```java
// java
boolean result = BusUtils.post("startModule0", context, "blankj", 18);

// kotlin
val result = BusUtils.post("startModule0", context, "blankj", 18)
```

点击编译之后会在该 application 模块中生成 `__bus__.json` 文件

```txt
{
  "startModule0": "boolean com.blankj.module0.Module0Activity.start(android.content.Context,java.lang.String,int)"
}
```


## 高级使用

参看本项目的组件化即可。

主要文件：settings.gradle




[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo_static_bus.png
[bus]: https://github.com/Blankj/AndroidUtilCode/utilcode/README-STATIC-BUS.md