Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

真正解决"There is no route match the path [/xxx/xxx], in group [xxx][ ]" #653

Open
Blincheng opened this issue Mar 27, 2019 · 44 comments
Labels

Comments

@Blincheng
Copy link

看了一下还是有很多人也遇到这个问题,这边给大家一个思路,一定能解决问题:

  1. 首先确定你的项目是用java还是Kotlin开发,如果是java,build配置如下:
    android {
    defaultConfig {
    javaCompileOptions {
    annotationProcessorOptions {
    arguments = [AROUTER_MODULE_NAME: project.getName()]
    }
    }
    }
    }
    dependencies {
    implementation 'com.alibaba:arouter-api:x.x.x'
    annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    }
    但是如果是Kotlin开发,那就不是这样配置了,我就是在这里翻车的,具体配置如下:
    apply plugin: 'kotlin-kapt'
    kapt {
    arguments {
    arg("AROUTER_MODULE_NAME", project.getName())
    }
    }
    implementation "com.alibaba:arouter-api:$rootProject.ext.arouterVersion"
    kapt "com.alibaba:arouter-compiler:$rootProject.ext.arouterCompilerVersion"
    还需要注意的是你的每个需要跳转的module都要配置哦(不一定要全部module,比如jarlib等,配置干啥呢?),我感觉基本就能解决你的问题了~如果还不行,那继续
  2. 第二点要注意的是路径配置,每个module的group(默认路径的第一级)一定要不一样。比如你的app module有个页面可以用@route(path="/app/activity") 然后有个login module中的页面就不要用/app开头了,可以用@route(path="/add/activity")这样子的。
    3.如果上面2点还不能解决你的问题,那建议细心的重新看文档再集成一遍吧~

希望大家都能快速的解决问题,tks

@GuardYang
Copy link

java,build配置
第一次运行页面跳转正常,再次编译就出现no route match the path

@MapleSunFLY
Copy link

同一个module一样也会报ARouter::There is no route match the path [/xx/xxx], in group [xx][ ]

@dansaka
Copy link

dansaka commented Jul 15, 2019

关键还是这句话:每个需要跳转的module都要配置哦

@Blincheng
Copy link
Author

嗯,好像还有挺多人在测试调研的时候犯了一个很容易出的错,看看你是不是。
你的项目有3个module,分别是app、bmodule 、cmodule。
然后你想测app中的页面唤起bmodule、cmodule中的一个页面,测试后好像不行?
不知道你在测测试调研的时候 有没有注意到你的app是否都dependencies了b和c呢?
如果没有这个操作,那么单独的b、c都没有被打包到apk中,怎么跳转呢?
所以一般是app dependencies b和c 然后b、c没有依赖关系,看a是都可以跳转bc,bc是否可以互相跳转。

@JumpingError
Copy link

我遇到的问题真的是各种都有:
1,java.lang.NoClassDefFoundError: Failed resolution of: Lcom/alibaba/android/arouter/routes/ARouter$$Group$$user;这个问题直接开始就崩溃了,这是debug包。
2,同一个组件下的类有些能跳转有些就跳转不了。
The group [user] has already been loaded, trigger by [/user/me][ ]
ARouter::There is no route match the path [/user/me], in group [user][ ]
小写的找不到,然后换了个大写的从新运行一下就可以
The group [user] starts loading, trigger by [/user/Me][ ]
The group [user] has already been loaded, trigger by [/user/Me][ ]
同样是user底下的 这两个就找不到了
ARouter::There is no route match the path [/user/LROrderCenter], in group [user][ ]
ARouter::There is no route match the path [/user/mySkills], in group [user][ ]
真的无语,改的都快崩溃了
麻烦哪位大神帮帮慢
QQ:1336814364

@inPeige
Copy link

inPeige commented Aug 30, 2019

一般这种情况是Arouter 缓存机制造成得。推荐clean或者卸载已经安装得软件。

@Jazero
Copy link

Jazero commented Sep 12, 2019

刚写demo 一直出这个问题。搜到这个回答,都按照要求查了一遍,没发现什么写法上的错误。
然后我发现工程目录依赖关系好像有点问题:aapp bmoudle cmoudle 还有个basemoudle。 basemoudle 引入了依赖。 bmoudle,cmoudle依赖了basemoudle。 然后运行后就提示这个问题。后来bmoudle,cmoudle都引入依赖。把basemoudle中的删掉后就没问题了。

@zhi1ong zhi1ong added the 挺好 label Sep 20, 2019
@StarkSongV
Copy link

最好是一级路径和二级路径都不相同!!!!我在获取Fragment的时候,由于path的一级路径相同,一直报找不到!!!
太坑了!!!

@protectedMan
Copy link

arouter一些缓存生成的位置比较特殊, 在module的build目录里,执行clean后无法清除arouter的缓存,必须手动删除module的build目录。

@AKMaS
Copy link

AKMaS commented Mar 8, 2020

是要每个支持跳转的module都必须单独依赖ARouter么?
我只有这样单独添加依赖才能跳转成功

@wanglejun
Copy link

如果多次确定自己的配置正确还出现此错误,考虑可能是当前项目的 gradle 版本和 ARouter 的版本不匹配也会出现此错误。如果你的 gradle 版本较高还出现此错误,请检查 ARouter 的版本,最好使用最新版本。我这边之前就是用了比较旧的版本导致一直出现这个错误,但是配置是完全正确的。记得arouter-api 和 arouter-compiler 都需要升级到最新版本。

@tianshi-dalian
Copy link

同一个module一样也会报ARouter::There is no route match the path [/xx/xxx], in group [xx][ ]

宿主moudle的一级目录名称不要与宿主package的最后一个词重复

@yanchengdeng
Copy link

遇到这个问题的同学请仔细检查是否在每个build.gradle文件中都正确设置了以下代码(kotlin项目,java项目参考修改)

kapt {
    arguments {
        arg("moduleName", project.getName())
    }
}


dependencies {
//...
    kapt 'com.alibaba:arouter-compiler:1.1.4'
}

⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!

最后这句话解决了我的问题:
⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!
调试半天不知道问题出现在,谢谢!

@funcodingdev
Copy link

最好是一级路径和二级路径都不相同!!!!我在获取Fragment的时候,由于path的一级路径相同,一直报找不到!!!
太坑了!!!

感谢老哥,我按照你说的改了就好了

@tekabo
Copy link

tekabo commented Sep 1, 2020

我也遇到了,卸载清缓存就好了,不清楚怎么回事

@JasonDev324
Copy link

遇到这个问题的同学请仔细检查是否在每个build.gradle文件中都正确设置了以下代码(kotlin项目,java项目参考修改)

kapt {
    arguments {
        arg("moduleName", project.getName())
    }
}


dependencies {
//...
    kapt 'com.alibaba:arouter-compiler:1.1.4'
}

⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!

最后这句话解决了我的问题:
⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!
调试半天不知道问题出现在,谢谢!

定义了一个通用的config.gradle 其他module引入可以吗

@zhi1ong
Copy link
Member

zhi1ong commented Oct 21, 2020

比较关键的几个点:

  1. 要理解 arouter-compiler 主要使用了 apt,所以但凡是用到了 !Route 注解的模块,都要 annotationProcesser / kapt arouter-compiler 模块

  2. 为了防止应用规模变大之后不好维护,设计上不允许不同 module 中存在相同 path 的路由,path 是 /a/b 中的第一段,例子里面就是 a

  3. 为了优化启动速度,正常情况下 ARouter 只有新装和升级(版本号发生了变化)会重建路由表,所以本地调试的时候,要注意通过
    ARouter.openDebug(),让 ARouter 处于调试模式,每次启动均会重建路由表,并且跳转失败会有 Toast 提示,要在 ARouter.init 之前调用才能生效,如果新增页面一直不生效,也可以清除数据试试

  4. 还有就是 ARouter 是为了实现开发阶段的解耦的,如果最终打包的时候,跳转的目标页面都没有被依赖到 app 中,任谁也跳转不了的

@ghost
Copy link

ghost commented Nov 18, 2020

主app是kotlin和java混编的,但是没有用到ARouter,子module作为aar包引入的,是纯java编写的。请问主app中要按照哪种方式配置呢?

@Clark-caipeiyuan
Copy link

主app是kotlin和java混编的,但是没有用到ARouter,子module作为aar包引入的,是纯java编写的。请问主app中要按照哪种方式配置呢?

用java的引用方式是不行的,要用kotlin的引用方式,我跟你的情况是一样的,已经按照这样的方式解决了。

@Qiang11
Copy link

Qiang11 commented Mar 19, 2021

我只有baseModule依赖了,其他module没有依赖一直报这个错,后来每个module都依赖了,就可以了

@LiQinglin007
Copy link

遇到这个问题的同学请仔细检查是否在每个build.gradle文件中都正确设置了以下代码(kotlin项目,java项目参考修改)

kapt {
    arguments {
        arg("moduleName", project.getName())
    }
}


dependencies {
//...
    kapt 'com.alibaba:arouter-compiler:1.1.4'
}

⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!

最后这句话解决了我的问题:
⚠️注意!arouter-compiler 这个依赖必须在build.gradle中声明,只在base_module中声明然后引用base_module中引用是无效的!
调试半天不知道问题出现在,谢谢!

定义了一个通用的config.gradle 其他module引入可以吗

可以,就是需要在每一个model引入一下

@xfmaster
Copy link

一般这种情况是Arouter 缓存机制造成得。推荐clean或者卸载已经安装得软件。
。。。。 这个还真是 我这死活报这个错,卸载重新装就好了

@chinnsenn
Copy link

按照正确配置检查了好几遍还是会报「ARouter::There is no route match the path [//」,清除了 AS 缓存没用。最后卸载了手机上的版本重新安装 OK 了。推测是我第一次忘记打开 ARouter.openDebug(),即便第二次打开了ARouter.openDebug()安装上也没有重建路由表(没有升级版本号)。

@ZLing770
Copy link

ZLing770 commented Nov 19, 2021

我也踩坑踩了一天:我在target 31 上配置 最低版本是21 上的配置,kotlin基本上的配置如下:
kotlin组件化开发:ARouter配置
common模块中配置:
plugins {
***
***
***
id 'kotlin-kapt'//kotlin语言使用注入框架
}
dependencies{
*****
//albaba Arouter引入
api 'com.alibaba:arouter-api:1.5.2'

}
业务模块的build.gradle配置:
apply plugin: 'kotlin-kapt'//kotlin语言使用注入框架

kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}

dependencies{
*****
//albaba Arouter引入
kapt 'com.alibaba:arouter-compiler:1.5.2'

}

在 gradle.properties中配置:

kapt.use.worker.api=false
kapt.incremental.apt=false
希望能帮助到大家

@lvfu
Copy link

lvfu commented Mar 24, 2022

比如你的app module有个页面可以用@route(path="/app/activity") 然后有个login module中的页面就不要用/app开头了,可以用@route(path="/add/activity")这样子的。 犯了这个错 也是报这个错误

@alibaba alibaba deleted a comment from 330132662 Mar 29, 2022
@alibaba alibaba deleted a comment from 972223177 Mar 29, 2022
@CPPAlien
Copy link

CPPAlien commented May 6, 2022

请问以 path 第一段来划分 group 的意义何在?这样会引起很大的坑啊,不同 module 中的第一段 path 内容不能命名成一样的,否则会导致路由表被覆盖。并且往往我们路由的 path 统一维护在一个 global 中,不同 module 都引用这个路由表,这种设计导致如果一个 Activity 被挪动了位置到其他 module 中,则就会出现错误。 天坑!!!

@330132662
Copy link

330132662 commented May 6, 2022 via email

@dazeGitHub
Copy link

这么坑

@330132662
Copy link

330132662 commented Mar 7, 2023 via email

@972223177
Copy link

972223177 commented Mar 7, 2023 via email

@wudouxingjun
Copy link

按照正确配置检查了好几遍还是会报「ARouter::There is no route match the path [//」,清除了 AS 缓存没用。最后卸载了手机上的版本重新安装 OK 了。推测是我第一次忘记打开 ARouter.openDebug(),即便第二次打开了ARouter.openDebug()安装上也没有重建路由表(没有升级版本号)。

各种方法都都尝试了 确实这个方法好使,可能还是缓存问题吧

@330132662
Copy link

330132662 commented Nov 24, 2023 via email

@972223177
Copy link

972223177 commented Nov 24, 2023 via email

@huang840801
Copy link

huang840801 commented Nov 28, 2023

以上方法都試過了還是沒解決,實在太雷了,到處都是坑。

@330132662
Copy link

330132662 commented Dec 19, 2023 via email

@972223177
Copy link

972223177 commented Dec 19, 2023 via email

@wellcao
Copy link

wellcao commented May 13, 2024

比如你的app module有个页面可以用@route(path="/app/activity") 然后有个login module中的页面就不要用/app开头了,可以用@route(path="/add/activity")这样子的。 犯了这个错 也是报这个错误

是的,我也发现了这个问题。build/generated/source下面确实生成了路由表,但是运行时却缺少这个模块的路由表信息。能解释一下吗。

@972223177
Copy link

972223177 commented May 13, 2024 via email

@dyguests
Copy link

比较关键的几个点:

  1. 要理解 arouter-compiler 主要使用了 apt,所以但凡是用到了 !Route 注解的模块,都要 annotationProcesser / kapt arouter-compiler 模块
  2. 为了防止应用规模变大之后不好维护,设计上不允许不同 module 中存在相同 path 的路由,path 是 /a/b 中的第一段,例子里面就是 a
  3. 为了优化启动速度,正常情况下 ARouter 只有新装和升级(版本号发生了变化)会重建路由表,所以本地调试的时候,要注意通过
    ARouter.openDebug(),让 ARouter 处于调试模式,每次启动均会重建路由表,并且跳转失败会有 Toast 提示,要在 ARouter.init 之前调用才能生效,如果新增页面一直不生效,也可以清除数据试试
  4. 还有就是 ARouter 是为了实现开发阶段的解耦的,如果最终打包的时候,跳转的目标页面都没有被依赖到 app 中,任谁也跳转不了的

我查了一晚上!!!,才发现你的回复,照着做才发现就是这个原因。离谱。
我 build/clean, invalid caches 都不行。

@972223177
Copy link

972223177 commented Jun 25, 2024 via email

@ysj40540
Copy link

AGP 8 有什么替代方案吗? 但是已经习惯用arouter了

@972223177
Copy link

972223177 commented Aug 19, 2024 via email

@inPeige
Copy link

inPeige commented Sep 19, 2024 via email

@972223177
Copy link

972223177 commented Sep 19, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests