Android 极简,轻量级的路由库
- 熟悉路由框架的整个流程
- 熟悉APT注解处理器
- 掌握代码自动生成
- 掌握跨模块通信
- 支持模块化路由跳转
- 支持设置拦截器
- 支持模块化通信
- 支持自动注册路由
- APT:Annotation Processing Tool,注解处理器
- 注解
- 反射
- module-base:业务基础
- module-login:登录模块
- module-home:首页模块
- tinyrouter-annotation:注解信息
- tinyrouter-api:对外提供api
- tinyrouter-compiler:自动处理注解信息,模块必须是Java library
- 初始化框架
public class App : Application() {
override fun onCreate() {
super.onCreate()
TinyRouter.getInstance().init(this)
}
}
- 使用路由
@Router(paths = ["myrouter://login"], desc = "登录模块")
class LoginActivity : AppCompatActivity() {
@RouterParam("fromwhere")
var fromwhere: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 用于获取传递过来的参数
TinyRouter.inject(this)
}
}
跳转路由
TinyRouter.navigator(this, "myrouter://login?fromwhere=app")
- 模块化通信 在module-base:业务基础,定义接口,接口下沉到base
public interface ILoginManager {
public String getUserName();
}
在module-login登录模块实现
@Service(parent = ILoginManager.class)
public class LoginManager implements ILoginManager {
@Override
public String getUserName() {
return "zhangsan";
}
}
在module-home:首页模块获取用户名
String name = TinyRouter.get(ILoginManager.class).getUserName();
无论如何也不会自动生成 META-INF,导致编译时无法识别 Processor,最后只能手动添加: 在 src/main 目录下新建 /resources/META-INF/services/javax.annotation.processing.Processor 目录和文件
plugins {
id 'kotlin-kapt'
}
kapt project(':tinyrouter-compiler')
生成类路径
build/generated/source/kapt/debug/packagename/生成的类名 exp build/generated/source/kapt/debug/com/simple/modular/compiler/RouterLoader$CodeGenerator.java
annotationProcessor project(':tinyrouter-compiler')
生成类路径
build/generated/ap_generated_sources/debug/out/packagename/生成的类名 exp build/generated/source/kapt/debug/com/simple/modular/compiler/RouterLoader$CodeGenerator.java
https://juejin.cn/post/6844903923606618126 https://www.jianshu.com/p/0d6860def79d https://www.shangmayuan.com/a/6b7ff9f99fe14fe1bb9c19eb.html https://blog.csdn.net/qq_19431333/article/details/89431041