常见问题排查

由于配置不正确、编译环境、兼容性等原因,有时WMRouter会出现无法跳转页面、ServiceLoader加载出错等问题,这里给出常见排查思路。

1、检查注解生成器是否配置

每个使用了注解的模块都需要配置注解生成器(annotationProcessor),包括Application和Library工程。

2、检查主工程Gradle插件是否配置

3、检查版本号

检查各个工程的annotationProcessor、Gradle插件、依赖的router模块版本是否一致。由于插件方案变动,各个模块版本应保持一致,配置了注解生成器的AAR建议重新打包,避免兼容问题。

4、尝试clean之后重新编译

5、检查注解生成器是否正常工作

1.0.x版本

  • 对于源码依赖的Library模块,检查build/generated/source/apt目录是否生成了Java初始化类,build/intermediates/classes目录是否生成Java资源文件,且内容指向Java初始化类,如图所示。
  • 对于依赖的AAR模块,可以在Android Studio的External Libraries中查看AAR里是否包含这些文件。

常见问题排查 - 图1

常见问题排查 - 图2

1.1.x及以上版本

  • 对于源码依赖的Library模块,检查build/generated/source/apt目录中是否生成了Java初始化类,如图所示。
  • 对于依赖的AAR模块,可以在Android Studio的External Libraries中查看AAR里是否包含Java初始化类。

常见问题排查 - 图3

6、检查Gradle插件是否正常工作

1.0.x版本

assets是否正确生成。Gradle插件会将注解生成器生成的资源文件合并到build/intermediates/assets/{buildVariant}/wm-router/services目录,其内容指向所有初始化类。

常见问题排查 - 图4

1.1.x及以上版本

查看Gradle编译输出的Log,是否正确找到了注解生成器生成的初始化类;反编译APK查看com.sankuai.waimai.router.generated.ServiceLoaderInit类中的内容是否正常。

常见问题排查 - 图5

7、查看运行时Log

如果还没有解决问题,可能是工程中的配置或用法不正确。通过Debugger.setLogger(logger)配置好Logger,在LogCat中过滤WMRouter标签查看Log。例如WMRouter在跳转过程中经过的UriHandler和UriInterceptor,如图。

常见问题排查 - 图6

8、断点调试

还可以打断点调试分析具体原因,例如最常用的注解RouterUri配置的节点,应该由UriAnnotationHandler根据scheme+host分发给 PathHandler,再由PathHandler根据path分发处理,断点可以打在shouldHandlehandleInternal等方法中。

9、提交Issue

如果还是没能解决问题,需要帮助或发现BUG,请在Github提交Issue