之前項目中一直用的是 ARouter,但是啟動耗時問題一直沒辦法解決。最近發(fā)現(xiàn)貨拉拉開源了一套更先進的路由框架 TheRouter,還宣傳能無縫切換,就趕緊拿來試了一下,真香??!
先看一下官方介紹:TheRouter 是一個 Kotlin 編寫,用于 Android 模塊化開發(fā)的一整套解決方案框架。
Github 項目地址:https://github.com/HuolalaTech/hll-wp-therouter-android、
官網(wǎng)文檔:https://therouter.cn/
仔細看了一下作者,還是濤哥寫的。我算是濤哥博客的老讀者了,之前就用過濤哥寫的 TheMVP 跟 KJFrameForAndroid 原來是去了貨拉拉。
運行遷移工具
- 下載
TheRouter官方提供的遷移工具,支持 Windows 和 Mac:工具下載看官方文檔 - 選擇當前項目的路由框架,目前遷移工具好像只支持 ARouter 遷移到 TheRouter。
- 選擇要使用的
TheRouter版本號 - 選擇項目路徑,直接選根目錄就可以

5.開始轉(zhuǎn)換。
- 轉(zhuǎn)完以后會生成改動日志,因為
ARouter的Provider有 init 方法,但TheRouter是沒有這個方法的,需要自己判斷一下代碼邏輯,我是直接在接口方法被調(diào)用的時候,先調(diào)一下init就行了。 - 日志生成以后如果沒有需要手動修改的部分,就啥也不用管了。如果有的話可以選擇把日志導(dǎo)出,放到 Sublime 里面看,比較清晰一點。
查看 git 修改記錄
可以看到,TheRouter 的遷移工具還是很智能的,需要改的地方都自動改了。還可以直接把沒用的ARouter方法注釋掉。大家可以自己試一試,如果寫了Provider 但是里面的 init 什么代碼也沒有,也會直接刪除。


單模塊自動初始化能力
并且 TheRouter 對于模塊化開發(fā)的支持非常完全,按照官方文檔的描述:TheRouter 是完全面向模塊化開發(fā)提供的一套解決方案。在模塊化開發(fā)時,可能每個模塊都有自己需要初始化的一些代碼。以前的做法是把這些代碼都在Application里聲明,但是這樣可能隨著業(yè)務(wù)變動每次都需要修改Application所在模塊。TheRouter 的單模塊自動初始化能力就是為了解決這樣的情況,可以只在當前模塊聲明初始化方法后,將會在業(yè)務(wù)場景時自動被調(diào)用。
每個加了 @FlowTask 注解的方法,都會在編譯期被解析,生成一個對應(yīng)的 Task 對象,這個對象包含了初始化方法的相關(guān)信息,比如:是否異步執(zhí)行、任務(wù)名、是否依賴其他任務(wù)先執(zhí)行。
當所有aar都編譯完成,生成好全部的 Task 以后,會在主 app 中通過Gradle插件進行聚合,在這時會將所有的 Task 做一次檢查,通過構(gòu)建有向無環(huán)圖來防止 Task 發(fā)生循環(huán)引用的情況。
每次應(yīng)用啟動后,會在路由初始化時,將有向圖中的全部Task,按照依賴關(guān)系按順序加載。
這個自動初始化能力一開始我們組很多同事都說沒用,結(jié)果實際用起來發(fā)現(xiàn):絕對的真香。尤其是之前在做隱私合規(guī)整改的時候,很多模塊的初始化代碼都要改,現(xiàn)在用了這套自定義自動初始化實際的框架,直接代碼全部內(nèi)聚回自己模塊,完全不存在跨模塊修改代碼的情況了。
有一些小坑
遷移工具整體還算不錯,但是用完發(fā)現(xiàn)還是有一些小坑的。
ARouter 自定義攔截器沒辦法遷移,用完一鍵遷移以后,代碼編譯不過了,還需要手動改一下攔截器的代碼改到TheRouter對應(yīng)的攔截器上才行。
總結(jié)
總之用下來的感受就是——絲滑!
直接無縫從ARouter遷移到TheRouter,之前老大評估還需要三天的時間,我直接半天就搞完了,測試測了一天也是說一把過。
順帶還把之前的初始化邏輯改了一下,后面開發(fā)的時候,基本上就不用再管別人開發(fā)的模塊了,我自己搞完我的事就下班,拜拜~