【Android】问题总结:Aroute There`s no route matched

问题背景:

清理项目资源之后,发现使用Aroute跳转失效,弹Toast提示

There`s no route matched

问题定位

  • 首先查看了一下要跳转activity的跳转调用,声明是否异常
// 跳转
ARouter.getInstance().build("/detail/detail")
           .navigation(this);
// 声明
@Route(path = "/detail/detail")

排查确认无问题

  • 冷静地分析了一下,可能是由于把项目资源其他java文件修改了引起的
  • 问题提示找不到路径,已经排查了不是手误写错了,也重新clean,build了还是不行,那说明代码哪里出现问题了。发现Aroute的Group名称是没问题的,查看日志发现Group “detail” 也是存在的,只是找不到具体路径,查找项目中Aroute自动生成路由的文件,文件内容如下:
/**
 * DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY AROUTER. */
public class ARouter$$Group$$detail implements IRouteGroup {
  @Override
  public void loadInto(Map<String, RouteMeta> atlas) {
    atlas.put("/detail/CourseService", RouteMeta.build(RouteType.PROVIDER, CourseServiceImpl.class, "/detail/courseservice", "detail", null, -1, -2147483648));
  }
}

发现了两个相同的ARouter$$Group$$detail文件,一个是在detail模块内,另外一个是在其他模块(以下称为"test"模块)内,查看文件发现detail对应的路由文件是包含要跳转的路由,而另一个则没有,发现可疑点,路由文件发生了覆盖,导致声明的路由被替换,在test模块中查找路由发现,其中一个Activity的路由的group为"detail",(路由为"/detail/testActivity") 事情有蹊跷,果断将其修改为"/test/testActivity",调试了一下,发现可以跳转了。问题解决

问题原因确认

原来是因为testActivity之前是在detail模块下,本次修改移动到了test模块下,但是路由没有修改导致。

问题总结

  • Aroute声明的路由一般分成两部"/groupName/routeName",第一级是group名称,一般与模块名称保持一致,避免不必要的问题,第二级是路由具体名称,根据实际情况起名字就可以了,当项目里模块化后,不要将group名称与其他模块名称(或者group)相同,否则会发生覆盖问题,导致路由匹配不到
  • 路由声明之后,在编译过程会将所有路由自动生成一个文件,文件名称为ARouter$$Group$$detail,对应每一个模块或者叫做group会生成一个,重复会覆盖,文件内容大致如下:
/**
 * DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY AROUTER. */
public class ARouter$$Group$$detail implements IRouteGroup {
  @Override
  public void loadInto(Map<String, RouteMeta> atlas) {
    atlas.put("/detail/CourseService", RouteMeta.build(RouteType.PROVIDER, CourseServiceImpl.class, "/detail/courseservice", "detail", null, -1, -2147483648));
  }
}

你可能感兴趣的:(工作问题总结,android知识点,android,组件化)