常见问题排查
由于配置不正确、编译环境、兼容性等原因,有时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.1.x及以上版本
- 对于源码依赖的Library模块,检查
build/generated/source/apt
目录中是否生成了Java初始化类,如图所示。 - 对于依赖的AAR模块,可以在Android Studio的External Libraries中查看AAR里是否包含Java初始化类。
6、检查Gradle插件是否正常工作
1.0.x版本
assets是否正确生成。Gradle插件会将注解生成器生成的资源文件合并到build/intermediates/assets/{buildVariant}/wm-router/services
目录,其内容指向所有初始化类。
1.1.x及以上版本
查看Gradle编译输出的Log,是否正确找到了注解生成器生成的初始化类;反编译APK查看com.sankuai.waimai.router.generated.ServiceLoaderInit
类中的内容是否正常。
7、查看运行时Log
如果还没有解决问题,可能是工程中的配置或用法不正确。通过Debugger.setLogger(logger)
配置好Logger,在LogCat中过滤WMRouter
标签查看Log。例如WMRouter在跳转过程中经过的UriHandler和UriInterceptor,如图。
8、断点调试
还可以打断点调试分析具体原因,例如最常用的注解RouterUri配置的节点,应该由UriAnnotationHandler
根据scheme+host分发给 PathHandler
,再由PathHandler
根据path分发处理,断点可以打在shouldHandle
、handleInternal
等方法中。
9、提交Issue
如果还是没能解决问题,需要帮助或发现BUG,请在Github提交Issue。