Mobile 跨平台開發的二三事

Something about Native, Hybrid, Cross-Platform Apps

Denis Hsieh
Denis Brain
4 min readJul 7, 2021

--

Native, Hybrid, Cross-Platform? 又有哪些開發框架

Native App 使用該平台的原生語言工具進行開發,像是:Android 使用 Java/Kotlin、iOS 使用 Objective-C/Swift。

Hybrid App 使用 Native 的方式,但 App 的內容功能實際上是以 Web(HTML/CSS/JS) 的形式開發,透過 Android 的 WebView 或 iOS 的 WKWebView 呈現出來。常見的開發框架有:Apache Cordova、Ionic…。

Cross-Platform App 常常與 Hybrid App 混淆,與 Hybrid 相同的是,Cross-Platform 一樣是「write code once and reuse for different platforms」[1];不同的是,Cross-Platform 的開發框架,提供與原生平台類似的畫面感、使用者體驗,在效能上也比 Hybrid App 來得好。常見的開發框架有:React Native、Flutter、Kotlin KMM、Qt…[2]。

跨平台開發的 Pros & Cons

Pros

在專案或產品發展的初期,使用 Hybrid 或 Cross-Platform 的方式,可以有效地降低開發以及人事成本,打造兩個平台的最小可行性產品(MVP),快速地進入市場並得到回饋[3]。

Cons

當 MVP 在市場上有其受眾,並確實生存下來後,開始進入中長期的開發與維護循環。當功能越來越複雜時,使用 Hybrid 或 Cross-Platform 開發出來的 App,會受限於開發框架對於原生平台本身的支援度,可能會出現一些難以 Debug 的奇妙問題,再者,同時精通 Android/iOS 的開發人員很少,後續對於開發與維護兩個平台的人力成本,也會日漸提高[4]。

初探 Kotlin KMM

有名的例子 Netflix 的 Apps 就是使用 Kotlin KMM 的方式開發,足以證明此開發框架適用於產品開發的成熟度。在此框架中,使用 Kotlin 為主要語言,撰寫共用的商業邏輯,對於兩個平台的特定功能以及 UI 介面,仍然需要分開撰寫,概念架構如下圖所示[5][6][7]。

From Netflix TechBlog

參考資料

[1] Native vs. Hybrid vs. Cross-Platform: How and What to Choose? (https://dzone.com/articles/native-vs-hybrid-vs-cross-platform-how-and-what-to)

[2] Native, Hybrid, Web App, Cross App哪一個是開發App最佳方案呢 ? (https://milkmidi.medium.com/native-hybrid-web-app-cross-app哪一個是開發app最佳方案呢-381e5529e47)

[3] Netflix Android and iOS Studio Apps — now powered by Kotlin Multiplatform (https://netflixtechblog.com/netflix-android-and-ios-studio-apps-kotlin-multiplatform-d6d4d8d25d23)

[4] Airbnb: 我們一起寫過的 React Native (https://blog.oursky.com/2018/08/08/airbnb-sunsetting-react-native-for-mobile-and-web/)

[5] Is Kotlin Multiplatform Mobile Ready for Production? (https://www.youtube.com/watch?v=L8Xq15NTuCc)

[6] I Built a Cross Platform App with Kotlin (https://www.youtube.com/watch?v=7Lz9mvnK-x8)

[7] Kotlin Multiplatform Mobile (https://kotlinlang.org/lp/mobile/)

Last updated July 07 2021

--

--

Denis Hsieh
Denis Brain

人生就是在絢爛與平靜中,不斷循環的過程。