大家好,我係蒼王。
以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。
[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表
很久沒法表文章了,是因為近來實在太忙了。
作為程式設計師,每天十點,半夜一兩點下班,感覺身體真的吃不消。我們的團隊是偉大的,16天開發一個新的app,8天開發,8天測試,然後上線。或者這是很好的人生經歷。但是大腦得不到任何休息,沒有了陪伴另家人的時間,沒有可以對自己輸入,或者輸出的事情,也會開始懷疑人生了。
我很喜歡程式設計師這份職業,是因為它能夠創造出有趣的東西。我想做一些有趣的東西,我希望搭建自己想要的東西。但是在公司工作,是無法實現這些的。所以我開始寫作,開始寫一些自己喜歡的內容,在這個時候也得到很多同學的關注,給予各種的鼓勵。我並不是什麼大神,我只是想寫我自己寫我喜歡的內容,去多點理解這個世界的構造。
感慨的話,說到這裡。
今天要說的是之前Kotlin編寫中遇到的問題,當時發現Kotlin無法使用ARouter。
最新的路由跳轉已經放在了我Gank元件化例項(https://github.com/cangwang/Gank/tree/kotlin)歡迎star一波。
一 問題原因
編譯是成功的,但是其跳轉的時候發現提示找不到任何的route matched。
那應該是無法生成任何的route match檔案。
我們看一下什麼情況下會提示出這樣的資訊,這裡當然也是需要深入一下原始碼的。
這是首頁廣告頁跳轉程式碼
其build的方法最主要是建造出一個Postcard的物件,然後通過navigation來完成跳轉
而_ARouter檔案才是實際處理跳轉的檔案
我們看到這裡有個NoRouteFoundException的異常丟擲,其丟擲的錯誤顯示和我們的toast是一樣的。可以鎖定其toast的彈出位置正式這裡。
在LogisticsCenter檔案中有兩處有可能丟擲問題的地方。
那麼這裡其實找到了原因是每個跳轉的Module,都會通過apt來生成幾個程式碼ARouter的檔案。
如果我們標註了Module的一些Group標示,ARouter的自定義的apt會做一些編譯時執行。
我們可以看到正常情況下,每個Module都會生成一個ARouter$$Group$$+"groupName"檔案,通過繼承IRouteGroup來完成回撥。
我們可以看到LogisticsCenter的init方法中,註冊每個IRouteGroup對映到LogisticsCenter中。
而只有響應的的Group檔案生成並且註冊後才能跳轉成功,這裡的問題很明顯是並根本沒有生成Group檔案。
二 解決方案
我們看看配置我們的生成命名等方式官方提供的apt編譯時註解都是java生成方式,但是kotlin有他獨有的kapt框架來做apt相關的操作。
我們需要做的是將apt配置為kapt那麼能正常完成編譯。
java中使用ARouter的配置方式,需要配置moduleName
然後annotationProcressor來配置arouter的註解(Android Gradle 外掛 2.2 版本的釋出,Android Gradle 外掛提供了名為annotationProcessor的功能來完全代替android-apt)
而使用kapt的配置,我們先將宣告plugin,這裡順序千萬別錯了。
而使用kapt的配置,我們將moduleName宣告(以前apt宣告配置引數的時候就是這樣處理的)
還需要修改引用的annotationProcressor換為kapt。
這樣之後,只要本來程式碼配置正常,那麼路由跳轉也絕對是無問題了,每個module都需要如此配置。
1.這裡暫時發現的問題是Android studio 2.3.2的版本,databinding會有坑,群裡的同學實踐過。(debug版本 他去找release裡面的databinding-info檔案)
我使用的2.3.1沒有任何問題。
****2017.6.12*********
這個bug 2.3.1的Android studio還是遇到了
解決的方案很簡單
建立一個空的_generated.txt檔案,就能順利編譯通過。
2.AutoWired欄位需要使用@JvmField才能正常使用
最後這裡給大家推薦一個kapt配置dagger butterknife等的地址,給大家參考。配置地址
然後彩蛋來了,是kapt的原始碼地址
kapt原始碼地址(https://github.com/JetBrains/kotlin/tree/master/plugins/kapt3/src/org/jetbrains/kotlin/kapt3)
希望總在你堅持中降臨。
下一節將會更精彩,敬請期待!!!
群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!