如无法解决你的问题,建议登记应用,获取优先技术支持 https://github.com/HuolalaTech/hll-wp-therouter-android/issues/57
(注:1.2.0-rc5版本已修复:KSP
与ViewBinding
共用不生成路由表的问题)
请按照以下步骤排查:
Preferences-> Build Tools-> Gradle-> Gradle JDK
。不能用AS自带的jdk,KSP会有兼容问题,请在 Oracle 官网下载:Java 17、Java 11、Java 8。@Autowired
注解编译不通过查看 GitHub Issue:https://github.com/HuolalaTech/hll-wp-therouter-android/issues/6
https://github.com/HuolalaTech/hll-wp-therouter-android/issues/22
https://github.com/HuolalaTech/hll-wp-therouter-android/issues/29
https://therouter.cn/docs/2022/09/03/01
请查看文档 【1.3 服务提供方】章节的内容:https://therouter.cn/docs/2022/08/27/01
TheRouter 路由支持多进程,但默认只会在主进程执行初始化逻辑。如果使用了多进程,可以先关闭TheRouter
的自动初始化,然后手动在Application
的onCreate()
中执行初始化功能。
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
theRouterUseAutoInit = false
}
override fun onCreate() {
super.onCreate()
TheRouter.init(this)
}
注意:
ServiceProvider
,TheRouter 支持跨进程获取数据,但获取的数据本身需要支持跨进程,可以理解为TheRouter
本质是个链接两个进程的通道,要将数据从一个进程传递到另一个进程,这个数据本身需要能够被另一个进程接收的到。FlowTask
的跨进程依赖暂不支持,预计支持版本在1.2.2
。ActionManager
的跨进程响应暂不支持,预计支持版本在1.2.2
。默认情况下,TheRouter
会在debug
模式下,将log
打印到控制台,在release
模式下不做任何输出。
如果你希望采集线上日志信息,可以自定义release
场景下的日志输出方式:
override fun onCreate() {
// 这一步建议放在Application.onCreate()之前,否则可能会在赋值之前就有部分日志已经执行了默认逻辑。
TheRouter.logCat = {tag, msg ->
// 执行上报日志的逻辑
}
super.onCreate()
}
// 判断是否为路由落地页path
TheRouter.isRouterPath(path) : Boolean
// 判断是否为 Action
TheRouter.isRouterAction(path) : Boolean
如果需要记录用户历史操作信息,用于排查错误时回放,可以直接使用历史记录导出功能:
// level共8个状态可选
val NONE // 不导出任何数据
val ACTIVITY //仅导出Activity的路由操作
val FRAGMENT //仅导出Fragment的路由操作
val PAGE // 导出 Fragment + Activity的路由操作
val ACTION // 导出 ActionManager 的操作记录
val SERVICE_PROVIDER // 导出 ServiceProvider的记录
val FLOW_TASK // 导出 FlowTaskExecutor 的历史记录
val ALL // 导出全部记录
// 8种状态可互相叠加,例如
val level = ACTIVITY + ACTION + FLOW_TASK
export(level).forEach {
info.append(it).append('\n').append('\n')
}
有一些特殊的业务场景可能必须使用Intent
对象作为参数,例如通知栏点击以后,系统只提供了Intent
参数,或者用于替代startActivityForResult()
的新 API ActivityResultLauncher
。
TheRouter 也支持这样的使用场景:
导入 Intent:
TheRouter.build(intent).withXxxxx().navigation()
导出 Intent:
// 注:导出Intent时,需要url有对应的落地页,否则Intent不会附带withXXX()的参数信息
val intent = TheRouter.build(url).withXxxxx().createIntent()
TheRouter 的路由表是完全动态化的,所以允许动态加载插件路由表。 现有市面上插件化框架较多,具体可参考使用的插件化方案,当插件被加载时分别调用如下代码
// 在异步线程执行
execute {
// 初始化插件内的依赖注入
TheRouterServiceProvideInjecter.trojan();
// 初始化插件内的FlowTask
TheRouterServiceProvideInjecter.addFlowTask(context, TheRouter.digraph);
// 初始化插件内的路由表
TheRouterServiceProvideInjecter.initDefaultRouteMap();
}
TheRouter 的路由表是完全动态化的,所以允许动态加载跨平台项目的路由表。
可以直接将路由表配置到/assets/RouteMap.json
文件中。
如果路由表的 url
是具备规律的,可简单使用正则表达式一次性加载。
[
{
"path": "https://kymjs.com/flutter/\\S*",
"className": "com.therouter.FlutterActivity",
"action": "",
"description": "",
"params": {
"key":"value"
}
},
......
// 添加其他路由表
......
]
请完整查看接入文档https://therouter.cn/docs/2022/11/23/01,并仔细阅读【第一步:接入classpath】
TheRouter 的依赖全部上传在 mavenCentral
,请检查你的仓库声明中是否有声明。另外,请不要使用阿里云的镜像仓库,否则也会造成拉不到依赖的情况。
repositories {
mavenCentral()
}
API 'android.registerTransform' is removed
https://github.com/HuolalaTech/hll-wp-therouter-android/issues/121