[Android元件化]Kotlin的路由跳轉

Cang_Wang發表於2017-06-12

大家好,我係蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表


很久沒法表文章了,是因為近來實在太忙了。

作為程式設計師,每天十點,半夜一兩點下班,感覺身體真的吃不消。我們的團隊是偉大的,16天開發一個新的app,8天開發,8天測試,然後上線。或者這是很好的人生經歷。但是大腦得不到任何休息,沒有了陪伴另家人的時間,沒有可以對自己輸入,或者輸出的事情,也會開始懷疑人生了。

我很喜歡程式設計師這份職業,是因為它能夠創造出有趣的東西。我想做一些有趣的東西,我希望搭建自己想要的東西。但是在公司工作,是無法實現這些的。所以我開始寫作,開始寫一些自己喜歡的內容,在這個時候也得到很多同學的關注,給予各種的鼓勵。我並不是什麼大神,我只是想寫我自己寫我喜歡的內容,去多點理解這個世界的構造。

感慨的話,說到這裡。


今天要說的是之前Kotlin編寫中遇到的問題,當時發現Kotlin無法使用ARouter。

最新的路由跳轉已經放在了我Gank元件化例項(https://github.com/cangwang/Gank/tree/kotlin)歡迎star一波。

一 問題原因

編譯是成功的,但是其跳轉的時候發現提示找不到任何的route matched。

[Android元件化]Kotlin的路由跳轉

那應該是無法生成任何的route match檔案。

我們看一下什麼情況下會提示出這樣的資訊,這裡當然也是需要深入一下原始碼的。

這是首頁廣告頁跳轉程式碼

[Android元件化]Kotlin的路由跳轉
首頁跳轉程式碼
[Android元件化]Kotlin的路由跳轉

其build的方法最主要是建造出一個Postcard的物件,然後通過navigation來完成跳轉

[Android元件化]Kotlin的路由跳轉

而_ARouter檔案才是實際處理跳轉的檔案

[Android元件化]Kotlin的路由跳轉

我們看到這裡有個NoRouteFoundException的異常丟擲,其丟擲的錯誤顯示和我們的toast是一樣的。可以鎖定其toast的彈出位置正式這裡。

[Android元件化]Kotlin的路由跳轉

在LogisticsCenter檔案中有兩處有可能丟擲問題的地方。

[Android元件化]Kotlin的路由跳轉

那麼這裡其實找到了原因是每個跳轉的Module,都會通過apt來生成幾個程式碼ARouter的檔案。

[Android元件化]Kotlin的路由跳轉

如果我們標註了Module的一些Group標示,ARouter的自定義的apt會做一些編譯時執行。

[Android元件化]Kotlin的路由跳轉

我們可以看到正常情況下,每個Module都會生成一個ARouter$$Group$$+"groupName"檔案,通過繼承IRouteGroup來完成回撥。

[Android元件化]Kotlin的路由跳轉

我們可以看到LogisticsCenter的init方法中,註冊每個IRouteGroup對映到LogisticsCenter中。

[Android元件化]Kotlin的路由跳轉

而只有響應的的Group檔案生成並且註冊後才能跳轉成功,這裡的問題很明顯是並根本沒有生成Group檔案。

[Android元件化]Kotlin的路由跳轉


二 解決方案

我們看看配置我們的生成命名等方式官方提供的apt編譯時註解都是java生成方式,但是kotlin有他獨有的kapt框架來做apt相關的操作。

我們需要做的是將apt配置為kapt那麼能正常完成編譯。

java中使用ARouter的配置方式,需要配置moduleName

[Android元件化]Kotlin的路由跳轉

然後annotationProcressor來配置arouter的註解(Android Gradle 外掛 2.2 版本的釋出,Android Gradle 外掛提供了名為annotationProcessor的功能來完全代替android-apt)

[Android元件化]Kotlin的路由跳轉

而使用kapt的配置,我們先將宣告plugin,這裡順序千萬別錯了。

[Android元件化]Kotlin的路由跳轉

而使用kapt的配置,我們將moduleName宣告(以前apt宣告配置引數的時候就是這樣處理的)

[Android元件化]Kotlin的路由跳轉

還需要修改引用的annotationProcressor換為kapt。

[Android元件化]Kotlin的路由跳轉

這樣之後,只要本來程式碼配置正常,那麼路由跳轉也絕對是無問題了,每個module都需要如此配置。

1.這裡暫時發現的問題是Android studio 2.3.2的版本,databinding會有坑,群裡的同學實踐過。(debug版本 他去找release裡面的databinding-info檔案)

我使用的2.3.1沒有任何問題。

****2017.6.12*********

這個bug 2.3.1的Android studio還是遇到了

[Android元件化]Kotlin的路由跳轉

解決的方案很簡單

建立一個空的_generated.txt檔案,就能順利編譯通過。

[Android元件化]Kotlin的路由跳轉



2.AutoWired欄位需要使用@JvmField才能正常使用


最後這裡給大家推薦一個kapt配置dagger butterknife等的地址,給大家參考。配置地址

然後彩蛋來了,是kapt的原始碼地址

[Android元件化]Kotlin的路由跳轉

kapt原始碼地址(https://github.com/JetBrains/kotlin/tree/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3)


希望總在你堅持中降臨。

下一節將會更精彩,敬請期待!!!

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

[Android元件化]Kotlin的路由跳轉

相關文章