AS負責人說不必用Kotlin重寫,但OkHttp拿Kotlin重寫了一遍,就發了OkHttp 4.0!


雖然 Android Studio 的負責人 Jeffery 已經澄清,只是 Kotlin-First 而不是 Kotlin-Must,並不需要將 App 用 Kotlin 重寫一遍。但是 OkHttp 已經開始用 Kotlin 重寫的工作,我們來看看這次重寫后帶來的差異。

一. 序

在今年的 Google I/O 大會上,Google 宣布將以 Kotlin 作為 Android 開發的一級編程語言。而同天,Google 就開源了只支持 Kotlin 的 Jetpack Compose,以借此呼應這一戰略。

消息一出,不少 Android 開發就擔心以后是不是只能用 Kotlin 開發了。Android Studio 的負責人 Jeffery Van Gogh,立刻發文表示,"Kotlin-First" 只是表示 Kotlin 將比 Java 在 Android 中占據更重要的地位,但是並不需要將現有 Java 開發的 Android App 使用 Kotlin 重寫一遍。

Jeffer 也表示,在 Android Studio 的十幾萬代碼中,大約只有 10% 的 Kotlin 代碼,也只會用 Kotlin 來編寫新功能。

只是 Kotlin-First,而非 Kotlin-Must。

雖說 Google 也不建議我們將現有的 App 用 Kotlin 重寫一遍,但是 OkHttp 這個 Android 下最火的網絡框架開源庫,已經開始着手用 Kotlin 將整個庫重寫一遍。

接下來我們看看這次升級的細節吧。

二. Kotlin 版的 OkHttp

Kotlin 是由 JetBrains 公司開發,與 Java 100% 互通,並且具備諸多 Java 尚不支持的新特性。就我個人的使用體驗來說,Kotlin 還是非常不錯的,唯一有問題的可能就是寫 Kotlin 太爽了,導致在同項目中編寫 Java 代碼時,有那么零點幾秒的恍惚。

近期 Jesse Wilson 表示,已經使用 Kotlin 語言,把 OkHttp 3.0 全部重寫一遍,並將其命名為 OkHttp4。

此次升級主要是受到了 Okio 2 的啟發,而 OkHttp 4 的功能和邏輯,與 OkHttp 3.0 完全一致,等於只是用 Kotlin 將之前的 Java 版本,復刻了一遍。

在僅用 Kotlin 將原項目重寫一遍,帶來了一些數據指標的變化,我們一起來看看。

2.1 代碼量的比較

從代碼行數,可以看到,Kotlin 的編寫代碼量在減少。

  • Java: 25,775 行
  • Kotlin:24,114 行

代碼行減少了 7%,但是如果嚴格利用 Kotlin 的特性,類似 ConnectionSpec 這個類,可以減少 40% 的代碼。

2.2 編譯時間

Kotlin 的編譯時間是增加了。

  • Java :2.4 秒
  • Kotlin:10.2 秒

可以看到,Kotlin 的編譯速度,相較於 Java 是變慢了。這主要是因為 Kotlin 的編譯器比通用 Java 編譯器要慢的緣故。

2.3 二進制大小

因為編譯器的差異,也將導致 Kotlin 編譯后的文件,會比 Java 編譯后的代碼要大。

  • Java:415 KiB
  • Kotlin:670 KiB

大約大了 60%,這還是挺令人驚訝的。通過反編譯可以發現,這些額外的代碼,主要來自 JVM 重載、Kotlin 元數據、空檢查以及伴生對象的代碼。

三. 小結時刻

作為 Android 開發,現在是時候使用 Kotlin 了。在 Android 開發中,Kotlin 將比 Java 獲得更重要的地位,更多的在線培訓中以及官方 Demo 都會優先使用 Kotlin 做支持,而對 Java 只是 “盡量滿足”,並且有一些功能,可能只提供 Kotlin 的支持,例如本次開源的 Jetpack Compose。

從 OkHttp 的重寫這個事情上來看,Kotlin 編寫的代碼,雖然編譯速度更慢、編譯的二進制文件更大,但是我們開發人員編寫的代碼將更少。

這些也符合趨勢,程序員做的更少,機器做的更多,不過我相信 Google 在后期應該也會針對這些情況做一些優化,以達到滿足生產的需求。

reference:

github-issues

metrics-for-okhttps-kotlin-upgrade

本文對你有幫助嗎?留言、轉發、收藏是最大的支持,謝謝!


公眾號后台回復成長『成長』,將會得到我准備的學習資料,也能回復『加群』,一起學習進步;你還能回復『提問』,向我發起提問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM