meituan / WMRouter

WMRouter是一款Android路由框架,基于组件化的设计思路,有功能灵活、使用简单的特点。
https://tech.meituan.com/meituan_waimai_android_open_source_routing_framework.html
Apache License 2.0
2.31k stars 342 forks source link

fix: WMRouterTransform 遗漏 JarInput 中 ServiceInit_$ #94

Closed hcanyz closed 3 years ago

hcanyz commented 3 years ago

JarInput 中的 filename 格式为 com/sankuai/waimai/router/generated/service/ServiceInit_27c543960bb6e7e43b7e7c9554e68407.class,导致 WMRouterTransform 遗漏这部分类的 init 调用。

jzj1993 commented 3 years ago

checkClassName的格式是com.sankuai.waimai.xxx,而你添加的INIT_SERVICE_PATH格式是com/sankuai/waimai/router/generated/xxx,你加的这个startsWith并不会返回true?

Leifzhang commented 3 years ago

确认下一个问题 是不是路由表没有生成导致的?

hcanyz commented 3 years ago

@jzj1993 问题出现在 window 环境的 JarInput.getFile() 处理过程 ClassUtils.path2Classname(className) 只处理了 File.separator -> '.' ,而 JarInput.getFile() 拿到的 clasName 固定是 '$/$/$' 格式的。

DirectoryInput.getFile 则没问题。

hcanyz commented 3 years ago

@Leifzhang ServiceInit_27c543960bb6e7e43b7e7c9554e68407.class 文件确定是生成了的。 但是 com.sankuai.waimai.router.generated.ServiceLoaderInit 中没有 init 调用。

Leifzhang commented 3 years ago

因为重新调整了下项目架构啊 这部分如果真的有问题 可能要你重新提pr了

Leifzhang commented 3 years ago

顺便说下 plugin 可以当场调试了 你可以验证下有没有完全修复 现在

hcanyz commented 3 years ago

@Leifzhang 验证过已经修复

image

新PR https://github.com/meituan/WMRouter/pull/98 ~