-
Notifications
You must be signed in to change notification settings - Fork 209
兮尘 edited this page Aug 22, 2021
·
13 revisions
Component 是一个强大又灵活的框架. 主要分为 服务发现 和 路由两大模块
下面以 androidx 的 java8 版本为例讲解. 如果不是 Androidx 或者 java8 去掉相应的描述就好了
这个是框架的实现. 你只要保证想用的地方能引用到就好了. 但是我是基本放在 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
请注意!!!! 这个是每一个业务模块都必须配置的!!!
在每一个业务模块的 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 // 注意和上面依赖的版本号保持一致
Gradle 插件主要的作用就是后续加载模块的时候可以自动加载
在项目根目录下的 build.gradle 中, 添加依赖:
buildscript {
......
dependencies {
......
classpath "com.github.xiaojinzi123.Component:component-plugin:v1.x.x-androidx-java8" // 注意和上面依赖的版本号保持一致
}
}
然后在 app 的 build.gradle 中应用这个插件
apply plugin: 'com.android.application'
apply plugin: 'com.xiaojinzi.component.plugin'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
......
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();
- 详细的 文档在这里
- 使用 Api 的方式跳转文档在这里
在 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()
更详细的 文档在这里