|
1 | | -![logo][logo] |
| 1 | +# ApiUtils |
2 | 2 |
|
3 | 3 | ## 关于 |
4 | 4 |
|
5 | | -组件化开发会涉及到模块与模块之间相互调用,而各模块之间又是解偶的,所以就产生了很多路由方案,或者是把接口下沉到 `base` 组件中,但在 **[StaticBus][bus]** 看来,它们都略显复杂,**[StaticBus][bus]** 只需调用一个静态函数便可自由穿梭于各个模块,就像一辆巴士,由于是基于静态函数来实现,所以称她为 **[StaticBus][bus]**,如今已支持 Kotlin。 |
| 5 | +组件化开发会涉及到模块与模块之的相互调用,而各模块之间又是解偶的,所以就产生了很多路由方案,或者是把接口下沉到 `base` 组件中,在 AucFrame 架构中,我们可以通过 ApiUtils 来自由调用各模块的 APIs,各业务通过对外提供 export 模块来供其他业务方使用,自身实现 export 中的接口即可。AucFrame 结构如下图所示: |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +ApiUtils 扮演的角色如下所示: |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | +当然,在正常项目中你也可以使用 ApiUtils,下面来介绍其使用方式。 |
6 | 14 |
|
7 | 15 |
|
8 | 16 | ## 基本使用 |
9 | 17 |
|
10 | | -在项目根目录的 `build.gradle` 中添加 `bus` 插件: |
| 18 | +在项目根目录的 `build.gradle` 中添加 `api` 插件: |
11 | 19 |
|
12 | 20 | ```groovy |
13 | 21 | buildscript { |
14 | 22 | dependencies { |
15 | 23 | ... |
16 | | - classpath 'com.blankj:bus-gradle-plugin:2.0' |
| 24 | + classpath 'com.blankj:api-gradle-plugin:1.0' |
17 | 25 | } |
18 | 26 | } |
19 | 27 | ``` |
20 | 28 |
|
21 | 29 | 然后在 application 模块中使用该插件: |
22 | 30 |
|
23 | 31 | ```groovy |
24 | | -apply plugin: "com.blankj.bus" |
| 32 | +apply plugin: "com.blankj.api" |
25 | 33 | ``` |
26 | 34 |
|
27 | 35 | 给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖: |
28 | 36 |
|
29 | 37 | ```groovy |
30 | | -result "com.blankj:utilcode:1.25.0" |
| 38 | +api "com.blankj:utilcode:1.25.0" |
31 | 39 | ``` |
32 | 40 |
|
33 | | -比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦: |
| 41 | +比如 feature0 中存在的 `Feature0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们通过 ApiUtils 来启动它,建立一个抽象类 `Feature0Api` 如下所示: |
34 | 42 |
|
35 | 43 | ```java |
36 | | -// java |
37 | | -public class Module0Activity extends Activity { |
38 | | - |
39 | | - @BusUtils.Subscribe(name = "startModule0") |
40 | | - public static boolean start(Context context, String name, int age) { |
41 | | - Intent starter = new Intent(context, Module0Activity.class); |
42 | | - starter.putExtra("name", name); |
43 | | - starter.putExtra("age", age); |
44 | | - context.startActivity(starter); |
45 | | - return true; |
46 | | - } |
47 | | -} |
48 | 44 |
|
49 | | -// kotlin |
50 | | -class Module0Activity : Activity() { |
51 | | - |
52 | | - companion object { |
53 | | - @BusUtils.Subscribe(name = "startModule0") |
54 | | - fun start(context: Context, name: String, age: Int): Boolean { |
55 | | - val starter = Intent(context, Module0Activity::class.java) |
56 | | - starter.putExtra("name", name) |
57 | | - starter.putExtra("age", age) |
58 | | - context.startActivity(starter) |
59 | | - return true |
60 | | - } |
61 | | - } |
62 | | -} |
63 | 45 | ``` |
64 | 46 |
|
65 | 47 | 在其他模块通过 `BusUtils.post("startModule0", Context, String, int)` 即可访问到它,一定要注意 `name` 之后的参数顺序和个数一定要和前面声明的函数相一致,其返回值也就是前面函数的返回值: |
66 | 48 |
|
67 | 49 | ```java |
68 | 50 | // java |
69 | | -boolean result = BusUtils.post("startModule0", context, "blankj", 18); |
| 51 | +boolean api = BusUtils.post("startModule0", context, "blankj", 18); |
70 | 52 |
|
71 | 53 | // kotlin |
72 | 54 | val result = BusUtils.post("startModule0", context, "blankj", 18) |
|
0 commit comments