ARouter 问题排查 -(ARouter::: ARouter::There is no route match the path [/xxx/xxx])

ARouter 问题排查

今天在使用 ARouter 写 demo 的时候,又碰上了两年前遇到的 There is no route match the path... 官网解释如下:

1.通常来说这种情况是没有找到目标页面,目标不存在
如果这个页面是存在的,那么您可以按照下面的步骤进行排查
2.检查目标页面的注解是否配置正确,正确的注解形式应该是 (@Route(path=“/test/test”), 如没有特殊需求,请勿指定group字段,废弃功能)
3.检查目标页面所在的模块的gradle脚本中是否依赖了 arouter-compiler sdk (需要注意的是,要使用apt依赖,而不是compile关键字依赖)
4.检查编译打包日志,是否出现了形如 ARouter::�Compiler >>> xxxxx 的日志,日志中会打印出发现的路由目标
5.启动App的时候,开启debug、log(openDebug/openLog), 查看映射表是否已经被扫描出来,形如 D/ARouter::: LogisticsCenter has already been loaded, GroupIndex[4],GroupIndex > 0

经过多方面排查,发现原因可能如下:

一、path 第一级路径在不同的 module 中重复

例如在 module_order模块中声明了/module/orderMain,随后又在 module_cart 模块中声明了 /module/cardMain。这样就会产生这个问题,所以,不同模块的第一级路径一定不能一致

二、build.gradle 配置问题,kotlin 与 java 配置方式不一致

纯 java module 配置如下
android {
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}

dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    implementation 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    ...
}
kotlin module 配置如下
apply plugin 'kotlin-kapt'

// 注意,这里与 dependencies 同级
kapt {
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}

dependencies {
	// arouter_verson 为我在项目里定义的统一版本,可根据自己需要指定
    implementation "com.alibaba:arouter-api:$arouter_version"
    kapt "com.alibaba:arouter-compiler:$arouter_version"
}

三、build.gradle 配置问题…

在每个业务 module 里都需要按照方法2的方式进行配置,并且 app 模块也需要这样配置!(这里每个业务 module 指的是包含页面的module,纯 library 不需要配置)

四、初始化问题

正确的初始化方式应该如下

	if (isDebug()) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效
	    ARouter.openLog();     // 打印日志
	    ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
	}
	ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化

据说如果不开启调试模式,在 debug 模式运行时就可能会出现这种问题

五、Module 导入问题

运行app壳工程(集成模式)时,需要将所有的业务 module 都倒入进来,并且要记的在 app 模块内的 Application 里初始化,如果没有都导入,跳转对应模块时也会提示这个。

这里还会有一个问题,以单模块模式运行时,我仍然会报这个错误,场景如下:我运行 module_cart 模块跳转 module_order 模块的某个页面时,就会出现这个错误,我猜测是由于 module_cart 并没有包含/导入 module_order模块。我的解决办法是,需要跳转别的模块时,启用集成模式来运行就 ok(不过确实不太方便,不知道有没有大佬有牛逼点的解决方法)

你可能感兴趣的:(安卓,android,kotlin,java)