TheRouter
提供了图形化界面的迁移工具,可以一键从其他路由迁移到TheRouter
。
全新迁移工具已集成到 AndroidStudio 开发插件中,可直接在AS插件市场下载,相关介绍请访问: https://therouter.cn/docs/2022/09/29/01
旧版本图形界面可使用:1.1.1 (2022-10-09更新)
Windows
系统迁移时,会发生乱码情况。犹豫迁移工具对文件的读写均采用UTF-8
编码,所以建议在迁移之前先将工程编码设置为UTF-8
。Android Studio支持修改工程编码:Setting -> Editor -> File Encodings
修改Global Encoding
和Project Encoding
为 UTF-8
ARouter 的 Provider.init 部分,建议改为懒加载方式,在服务方法被调用时自己主动调用init方法。
如果使用了 ARouter 拦截器部分,需要自己手动处理拦截器的逻辑,ARouter的拦截器全部可以用 TheRouter 的拦截器替换,具体逻辑请参考:TheRouter页面跳转:【第三部分】自定义处理器。
ARouter 封装了大量 Bundle 传参的操作,例如withBooleanArray()
这种。我们认为这样的封装是冗余的。如果你使用到了对应方法,在TheRouter内可以直接通过对Bundle对象调用对应的方法。例如:
// ARouter
ARouter.getInstance()
.build(path)
.withByteArray(key, value)
.withStringArrayList(key, value as ArrayList<String>)
.navigation()
// TheRouter
TheRouter.build("")
.fillParams { bundle ->
bundle.putByteArray(key, value)
bundle.putStringArrayList(key, value)
}.navigation()
with(bundle)
的实现区别。在 ARouter 中,with 操作是一个集合性操作,如果此时 bundle 中的 key 与 withString(key, value)
中的 key 重复,会发生后者覆盖前者的情况。
在TheRouter
中,with 操作是传入一个额外的对象,不会发生覆盖,但在落地页获取时需要通过 @Autowired
注解获取。
如果你希望with(bundle)
能直接通过intent获取,可以使用如下代码。
ARouter.build().with(yourBundle).navigate()
TheRouter.build("")
.fillParams { bundle ->
bundle.putAll(yourBundle)
}.navigation()
》》》
暂未发现其他需要手动修改部分
为防止在迁移完成后,写代码过程中,导包引用错误的情况。
建议手动检查一遍ARouter
的引用是否全部删除,并在各模块build.gradle
中配置如下代码,过滤掉相关引用。
这样如果发生引用错误问题,会在编译期报错,提前发现问题。
configurations {
all*.exclude group: 'com.alibaba', module: 'arouter-api'
all*.exclude group: 'com.alibaba', module: 'arouter-annotation'
}