整理 | 辛曉亮
根據 Meta 官網部落格訊息,Meta 正在將其 Android 應用的 Java 程式碼遷移至 Kotlin,Meta 表示,相比 Java,Kotlin 有一些關鍵優勢。截至目前,其 Android 程式碼庫已有超過 1000 萬行 Kotlin 程式碼。


Android 開發首選語言:Kotlin
2011 年 7 月,JetBrains 正式推出 Kotlin 程式語言,這是一款用於現代多平臺應用的靜態程式語言,Kotlin可以編譯成 Java 位元組碼,也可以編譯成JavaScript,方便在沒有 JVM 的設備上運行。與 Java 相比,Kotlin 的語法更簡潔,同時也提供更多的特性支持,比如高階函數、字串模板等等。Kotlin 自發布起就一直被拿來與 Java 比較,Google的兩次舉動才徹底讓 Kotlin 站穩腳跟。
在 2017 年 Google I/O 大會上,Google宣佈在 Android Studio IDE 中支持 Kotlin,兩年後的 2019 年 Google I/O 大會上,Google正式宣佈 Kotlin 是 Android 應用程序的開發人員的首選語言。
Google之所以支持 Kotlin,除了 Kotlin 基礎特性的優勢外,其與 Oracle 的 Java 侵權案也是主要因素。
2010 年,Oracle 認為Google在 Android 系統上無償使用了 37個 Java APIs,侵犯了他們的專利;在 Android 中還有 9 行程式碼抄襲了 Java,侵犯了他們的版權。雖然最終 Oracle 敗訴,但在Google與 Oracle 這長達八九年的對決中,Google也並不是勝利者。
2017 年之後,Google便將希望寄託在 Kotlin 之上,先是將 Kotlin 集成到 Android Studio,而後陸續推出 Android KTX(幫助 Kotlin 程式碼更簡潔)、Android Jetpack(全面兼容 Kotlin),最後在 2019 年宣佈 Kotlin 成為 Android 開發首選語言,並鼓勵安卓開發者從 Java 遷移至 Kotlin。
2019 年 I/O 大會,Google也宣佈其 Android 團隊採用了「Kotlin-first」的方法。Google擁有 70 多個至少部分使用 Kotlin 構建的 Android 應用,包括地圖、家庭、Play 商店、雲端硬碟等。Google表示,與 Java 相比,Kotlin 更高效,可以生成更安全的程式碼和更小的程式碼庫,並且與 Java 語言 100% 可互操作,通過允許它們共存,使從 Java 程式碼庫的轉換變得更容易。

Meta Android 程式碼遷移進行時
Meta 同樣對 Kotlin 感興趣,Facebook 軟體工程師 Omer Strulovich 稱,他們已經在用 Kotlin 替換其幾個流行的 Android 應用中的 Java 程式碼,包括 Facebook、Instagram、Messenger、Portal 和 Quest 等。截至目前,Facebook、Messenger 和 Instagram 的 Android 應用程序都有超過 100 萬行的 Kotlin 程式碼。Meta 的 Android 程式碼庫總共已包含有超過 1000 萬行的 Kotlin 程式碼。
Strulovich 說到:「Kotlin 被普遍認為是比 Java 更好的語言,在每年的 Stack Overflow 開發者調查報告中,Kotlin 的好評率也高於 Java」,他表示,Kotlin 已經成為 Android 開發的流行語言,「因此,我們將 Meta 的 Android 開發轉向 Kotlin 是合理的。」
儘管 Kotlin 有許多好處促使 Meta 進行遷移,但 Strulovich 也提到了一些 Kotlin 明顯的缺點,這些缺點使遷移具有一定的風險,至少對於大型應用程序而言是這樣。
首先,Java 和 Kotlin 在流行度上的巨大差距導致後者使用的工具較少,而且這些工具必須考慮到 Kotlin 與 Java 的互操作性,因此非常複雜。儘管這兩個語言具有 100% 的互操作性,但 Meta 發現它無法刪除所有 Java 程式碼。
「Kotlin 是一種流行的語言,但與 Java 相比,流行程度的差距很明顯。Java 是世界上第二或第三流行的語言(取決於如何衡量這一點)。這意味著 Kotlin 可用的工具更少。更糟糕的是,所有的 Kotlin 工具需要考慮 Kotlin 和 Java 的互操作性,這使得它們的實現變得複雜」,Strulovich 指出。
但 Meta 最大的擔憂還是在另一方面,相對於 Java,Kotlin 的構建時間較慢。
「我們從一開始就知道 Kotlin 的構建時間會比 Java 長,Java 在最佳化其編譯器方面領先了 20 年。由於我們擁有多個大型應用程序,更長的構建時間可能會對我們開發人員的體驗產生負面影響。」
Strulovich 舉了 HTTP 客戶端項目 OkHttp 在 2019 年從 Java 切換到 Kotlin 之後的編譯時間對比的例子。OkHttp 很小,只有 24000 行 Kotlin。它在 Java 中的編譯時間為 2.4 秒,而在 Kotlin 中為 10.2 秒,5 倍左右的差距。
權衡利弊後,Meta 還是認為將其眾多 Android 應用程序的程式碼庫從 Java 轉換為 Kotlin 並將其遷移過程及經驗分享出來。
Google的 Kotlin 產品經理 James Ward 對 Meta 的舉動表示歡迎:「三年來,Android 一直以 Kotlin 為先,因為它為我們提供了最好的開發者體驗,同時在 Java 及其生態系統的基礎上進行構建並與之互操作,」他說到:「因此,我們很高興看到 Meta 向 Kotlin 遷移,並且很高興他們取得了成功。許多 Google 團隊也經歷了從 Java 到 Kotlin 的類似旅程,截至 2022 年 10 月,最終達到超過 1100 萬行的 Kotlin 程式碼。其他大型項目進行類似的旅程再次確認了我們選擇的道路。」
參考連結:
https://engineering.fb.com/2022/10/24/android/android-java-kotlin-migration