開發 iOS 應用,Kotlin Native 是否夠格?

2022-01-09 CSDN

一直以來,因為有著 iOS、Android 等多個系統的存在,開發者在開發同一款應用時也需要根據不同的平臺去進行相應的修改,在此情況之下,Flutter、React Native、Weex 等多款跨平臺框架應運而生,有效提升了開發者代碼的復用性,大大降低了開發成本。而在 2017 年 Google I/O 大會上,自 Google 宣布將 Kotlin 作為 Android 開發的官方語言之後,Kotlin 的首席語言設計師 Andrey Breslav 也在 KotlinConf 上宣布 Kotlin/Native 已支持用於開發 iOS 應用。不過同時,不少開發者也提出質疑,其認為 Kotlin Native 處於早期階段,根本沒有想像中那麼美好。在本文中,作者 Jeremy Rempel 將從跨平臺的發展以及框架對比等多重角度,剖析 Kotlin Native 是否有存在的必要。

作者 | Jeremy Rempel

譯者 | 蘇本如

責編 | 屠敏

出品 | CSDN(ID:CSDNNews)

以下為譯文:

基於歷史原因,移動應用一直以來都要求在2個或更多不同的平臺和工具包上進行開發。包括但不限於:

邏輯抽象和公共代碼共享以便在不同的功能上重用並不是一個新概念,在現代計算的起步階段就有了。相比之下,iOS和Android的出現才剛過10年,還處於起步階段。

為什麼我們需要跨平臺解決方案?

iOS和Android平臺都非常複雜,開發者要在某一個平臺上成為專家需要數年的時間。掌握每個平臺需要懂得兩種官方支持的程式語言、硬體知識、平臺SDK和各種各樣的支持庫。希望同時支持iOS和Android應用程式的組織和公司必須至少要維持兩個開發團隊,因為同時擁有兩個平臺的豐富經驗的開發人員是非常罕見的。兩個開發團隊都試圖保持應用程式在兩個平臺的功能對等,在修補缺陷的同時仍然能夠利用每個平臺的優勢,這就導致開發團隊的進一步的碎片化。而具備平衡各個平臺的複雜性,降低平臺的衝突,有選擇性地跨平臺共享公共邏輯的能力,就能夠使團隊集中精力,為真正重要的用戶提供所需的功能和價值。

用戶體驗

從用戶的角度來看,移動體驗是他們在移動應用上能夠看到和交互的一切。用戶並不知道或並不關心應用程式使用的語言、框架或者使用了何種web服務。用戶與應用程式的交互是通過屏幕、通知、平臺以及與藍牙、傳感器和攝像頭等硬體的交互來進行的。蘋果和谷歌都在各自的平臺上進行了大量投資,並使其各具特色。每一次年度更新都會帶給我們新的功能、新的API以及諸如手錶、可彎曲電話、電視等等目標設備。

用戶體驗主要指的是UI和它與原生系統SDK的集成、以及性能和其他能力(如離線支持)。任何有使用限制,和在原生平臺上需要額外抽象的移動框架都會阻礙開發人員充分利用整個平臺的優勢,從而導致用戶體驗受損或額外的開發開銷。能夠使一個應用程式別具特色並為用戶帶來價值的是用戶與之交互的方面,如UI、Notification(通知)以及和系統其它部分的集成。而UI後面的應用層(如業務邏輯、REST端點、緩存、JSON序列化和依賴注入)則與平臺的相關性並不大。

理想平臺

一個理想的平臺應該具備如下特點:

應該能夠集成到現有平臺構建工具鏈和持續集成的基礎架構中

應該能夠以最小的代價,充分利用底層平臺API和語言,尤其是面向用戶的組件,如UI和Notification(通知)

應該能夠無縫集成,而不引入額外runtime的開銷

在IDE支持、編譯器和lint代碼檢查方面提供一流的工具支持

有成熟社區和第三方庫的支持

Flutter(註:谷歌的移動UI框架)

Flutter之於移動應用就像Silverlight之於Web應用一樣。它整合了自己的庫、語言和頁面渲染。Flutter是由谷歌的一個獨立於Android的團隊開發的,它使用DART程式語言,目標是通過直接寫入視圖層,並提供自己的SDK,UI widget(小部件),runtime和編程環境,來開發出一個通用的開發平臺和SDK。Flutter的主要目的是取代而不是擴充Android和SDK框架。它的主要應用場景是希望以一致的UI界面運行在多個平臺上的新的待開發的項目。雖然Flutter可以提供高性能體驗,但是對於期望使用每個平臺獨特功能的複雜應用,跨平臺提供一致的外觀和體驗是很有挑戰性的。巧合的是,最受歡迎和討論最多的Flutter應用程式之一,Hamilton並沒有使用Material或Cupertino組件。

Dart:谷歌之外很少見到的小眾程式語言。現有開發人員需要重新培訓,招募新人不容樂觀。

Flutter SDK:目標是替換而不是補充原生SDK。

React Native

React是一個由Facebook開發的Javascript UI框架,用於開發現代單頁web應用(SPA)。React使用聲明性的方式描述UI。由於更新DOM樹的成本很高,框架將接收到所需的UI作為輸入,而React框架將比較新舊DOM之間的差異,並且只執行所需的更新。

React Native使用React框架。但是它的目標不再是HTML,而是原生Android和iOS平臺的SDK。React Native Javascript的runtime將通過bridge(橋接器)與原生框架異步通信。雖然它的目標是給兩個平臺提供最好的框架,但結果是喜憂參半的。React Native的最大貢獻是它充分利用並增強了底層移動平臺,而沒有取代它們。

React Native的主要缺點

Javascript:不管你是愛它還是恨它,Javascript已經成為最流行的語言之一,但它會引入第三方語言生態系統。要想在iOS和Android上成功部署或調試一個複雜功能,開發人員必須了解第三方語言和runtime。這種級別的抽象還引入了另一個要調試和支持的層。

Bridge(橋接器):原生模塊和本機代碼之間的任何通信都是通過橋接器完成的。這可能導致複雜的集成,並帶來性能損失。

依賴項:React Native引入了許多依賴項,導致無法在Android上支持X64等問題。詳見 https://stackoverflow.com/questions/48732351/react-native-app-64-bit-version 。React Native是一個大型平臺,它在原生平臺上引入了許多限制,從而導致安全性和可維護性問題。

Kotlin Native

Kotlin Native是由Kotlin程式語言的創建者Jetbrains開發的一個編譯器和一組庫。Kotlin Native旨在通過將代碼編譯成原生二進位文件並儘可能與原生平臺緊密集成來解決代碼共享問題,減少衝突,它並不是引入另一個runtime、語言或工具鏈。谷歌已經宣布將Kotlin作為Android開發的官方語言,因此大多數Android團隊都公開接受它。不過,Kotlin對iOS開發來說顯然是一門外語,但它與Swift、JavaScript和DART語言的相似性增加了它的內聚力。

與其他競爭框架相比,Kotlin Native的主要優勢在於GUI、傳感器、Notification以及每種設備獨特的內容都能以原生語言開發和無限制的運行平臺。與Flutter和React Native的解決方案相比,Kotlin Native解決方案減少了障礙並避免了損害。

在Android上,公共模塊使用原生構建工具組裝到最終的APK中。在iOS上,公共模塊被編譯到單個原生庫中,並使用原生構建工具鏈和原生IDE組裝到應用程式中。與React Native類似,Kotlin Native將嘗試利用底層平臺,並使開發人員能夠基於特性或組件定義Seam,以及決定哪些特性應在特定平臺或者在Kotlin Native上開發。Kotlin Native提供一個選項但並不強迫跨平臺共享代碼。

總結

移動計算的歷史是一個代碼分享和站在巨人肩膀上的歷史。隨著手機在我們的日常生活中變得越來越強大和無處不在,我們構建的移動應用將會越來越多,越來越複雜。能夠跨平臺共享代碼在未來將變得更加重要。Kotlin Native仍然是早期的測試版,並非沒有問題和挑戰,但無論如何,它都將成為未來跨平臺開發最實用的解決方案。

原文:https://medium.com/android-things/why-we-need-kotlin-native-adacc03e988c

本文為 CSDN 翻譯,如需轉載,請註明來源出處。作者獨立觀點,不代表 CSDN 立場。

 熱 文 推 薦 

☞當我們談資料庫時,是在談什麼?

☞Windows 7,難說再見

☞@程式設計師,Web 開源神器了解一下? | 程式設計師硬核評測

☞日本高中生開發酷炫「扔瓶子」機器人,想砸誰就砸誰

☞蘋果春季發布會:庫克絕不玩別人玩剩下的!

☞在線公開課 | 從理論走向實踐,多角度詳解Cloud Native

☞中國區塊鏈職業發展現狀: 30歲前不做開發; 平均薪資僅38.4萬; 跳槽薪資漲三成 (附完整報告下載資源)

☞上海交大CV博導微信群辱罵學生,已停止教學

☞現實!程式設計師只有跳槽才能漲薪嗎?

System.out.println("點個在看吧!");
console.log("點個在看吧!");
print("點個在看吧!");
printf("點個在看吧!\n");
cout << "點個在看吧!" << endl;
Console.WriteLine("點個在看吧!");
Response.Write("點個在看吧!");
alert("點個在看吧!")
echo "點個在好看吧!"

點擊閱讀原文,輸入關鍵詞,即可搜索您想要的 CSDN 文章。

相關焦點

  • Kotlin 一統天下?Kotlin/Native 開始支持 iOS 和 Web 開發
    iOS 應用和 Web 應用開發。Kotlin/Native 對 iOS 開發的支持另外一個重大消息就是 Kotlin/Native 已支持用於開發 iOS 應用,這也將是 Kotlin/Native 0.4 的特性之一。雖然對 iOS 開發的支持仍處於早期階段,但確實已經實現了,這是在所有平臺上使用 Kotlin 進行開發的重要一步。
  • Kotlin要支持iOS開發和Web開發了,這是要全棧?
    為了展示這種可能性,我們編寫了兩款應用,並將其發布在了蘋果 App Store 當中:1.Spinner 應用 (GitHub) 是一款利用 OpenGL 開發而成的簡單遊戲。其可同時運行在 iOS 及 Android 平臺之上(Play Store 連結),且兩個版本中的大部分代碼彼此共享。其 iOS 版本擁有幾項額外功能,例如遊戲中心集成等。
  • 你學習的 Kotlin,現在可以開發 iOS 了!來~先睹為快!
    Java 代碼想在不同平臺運行,還需要依賴各種 JVM 虛擬機,而 Kotlin/Native 不需要,它直接編譯生成的就是對應平臺上可執行的二進位文件。arm64)WebAssembly (wasm32 only)雖然支持的平臺,對系統架構還有要求,但是已經可以看到,Kotlin/Native 今後的發展潛力還是很巨大的。
  • Kotlin 統一移動開發?已經開始支持 iOS 和 Web 開發
    iOS 應用和 Web 應用開發。Kotlin/Native 對 iOS 開發的支持另外一個重大消息就是 Kotlin/Native 已支持用於開發 iOS 應用,這也將是 Kotlin/Native 0.4 的特性之一。雖然對 iOS 開發的支持仍處於早期階段,但確實已經實現了,這是在所有平臺上使用 Kotlin 進行開發的重要一步。
  • 雲音樂 React Native 體系建設與發展
    商城 RN 應用上線後,其他團隊表示有興趣嘗試,但當時 RN 項目開發沒有腳手架,項目創建通過原始拷貝進行,缺少 forweb 支持,RN 預加載只接入了 iOS 一端。種種原因,導致 RN 開發效率低下,音樂人業務原本有興趣用 RN 來開發新應用,開發到一半改成了 H5。
  • 深度測評 | 五大主流多端開發框架全面對比
    一,安裝環境,開發工具對比任何框架的安裝環境都代表了這個框架對新手是否友好。所以筆者特別從安裝環境,開發工具上介紹各個不同框架的情況,來比較一下,新人上手的成本和門檻,筆者是 MacOS 用戶,以下全文介紹的都是在 Mac 下的開發環境和開發工具。
  • Kotlin打造Android路由框架
    在組件化開發的實踐過程中,當我完成一個模塊的開發後(比如說這個模塊中有一個Activity或者Service供調用者調用),其他模塊的開發者要啟動我這個模塊中的Activity的代碼我們再熟悉不過了:val intent = Intent(this, MainActivity::class.java)intent.putExtra("param1", "1")
  • 分享一個 Kotlin 學習方式
    正如前面預言的一樣,此次 Google 肯定是強烈推薦 Flutter 的,其實在國內外一些大廠,比如阿里、騰訊、Google 都在使用 Flutter 開發 App,阿里本身已經開源了跨平臺開源框架 Weex,都在追隨,也可見 Flutter 的魅力。
  • JavaScript開發重型跨平臺應用以及架構
    這裡不得不提到vsCode,它其實就是用ELectron開發,基於TypeScript。當然肯定使用了不少C++插件,說到這裡,留下傷心的眼淚,最近也是被折磨得很難受成功開發一個重型應用的好處出去面試基本上很容易成功,特別是專業性強的崗位,例如你在QQ開發了十幾年,你根本不用出去找工作,當然你應該也不會跑技術全面,複雜場景你都能hold住有能吹的地方,可以跟誰說:我開發的東西,多少萬人在用,老了還能吹。
  • React Native 0.62 發布,默認支持 Flipper,新的暗黑模式
    Flipper 是用於調試移動應用的開發人員工具,它在 Android 和 iOS 社區中都很流行,Flipper 提供以下功能: Metro Actions:重新加載應用並從工具欄直接觸發開發菜單。 Network Inspector:查看設備應用程式發出的所有網絡請求。 Metro and Device Logs:查看、搜索和過濾來自 Metro 和設備的所有日誌。
  • 西安app控制類軟體開發,安卓APP和蘋果iosAPP軟體開發公司
    現在隨著手機智能化的不斷普及,絕大多數人用的手機都是智慧型手機,現在市面上比較多的智慧型手機是安卓和ios的,這兩個作業系統在本質上有很大的區別,不論是開發還是維護都是要分開來說的,那麼iops平臺開發的APP和安卓平臺開發的APP究竟都有哪些區別呢?
  • Adobe 使用 AI 識別 PS 「照騙」;Java 要被 kotlin 打敗了?
    為了還照片一個「清白」,Photoshop始祖Adobe決定開發一款能夠識別那些後期修改照片的AI識別工具,讓照片不再「照騙」。1、2018 年技能提升報告:Java 要被 kotlin 打敗了?Packt 發布了 2018 年技能提升報告的結果,旨在了解軟體開發人員的工具使用情況和技能趨勢。報告顯示,Java 在程式語言中仍然佔據主導地位,但 Kotlin 極有可能將其趕出移動開發的榜首。
  • 【如何快速的開發一個完整的iOS直播app】
    python:腳本語言,適合網絡應用程式的開發,有利於開發效率,現在顯得越來越強大PHP:伺服器端腳本語言,適合做動態網站JS:作為客戶端的腳本語言,在瀏覽中解釋執行,shell:作業系統腳本語言,一般指Unix/Linux中使用的命令行編譯語言,執行文件是二進位。
  • 重生奇蹟手遊安卓和ios蘋果數據是否互通詳解
    18183首頁 重生奇蹟 重生奇蹟手遊安卓和ios蘋果數據是否互通詳解 重生奇蹟手遊安卓和ios蘋果數據是否互通詳解 來源:www.18183.com
  • 拋棄 Java 改用 Kotlin 的六個月後,我後悔了!
    部分團隊成員是 Kotlin 的擁護者,再加上我們都想嘗試一下新的東西,於是我們決定用 Kotlin 來開發這個項目。由於 Spock 測試框架不支持 Kotlin,因此我們決定堅持使用 Groovy 來測試。2018年春天,使用 Kotlin 開發幾個月之後,我們總結了 Kotlin 的優缺點,最終結論表明 Kotlin 降低了我們的生產力。
  • 入門實踐丨如何在K3s上部署Web應用程式
    首先,我將介紹示例應用程式。這其實已經簡化了許多細節,但它說明了常見的用例。然後我們將熟悉了解容器化應用程式的過程。在我們繼續之前,我會討論我們如何使用容器來讓我們的開發更加輕鬆,特別是如果我們在一個團隊中工作,或者是當我們在一個新的環境中工作時,希望減輕開發人員的負擔。一旦我們將應用程式容器化,下一步就是將它們部署到Kubernetes上。
  • 中文版iOS應用開發教程來襲 開發者無需再啃英文教程
    而就在12月8號,蘋果更發布了中文版 iOS 應用開發教程《馬上著手開發 iOS 應用程式》,以方便和吸引更多的中國開發者來開發 iOS 應用。有此中文版教程後,中國開發者們再也不用啃 iOS 應用的英文開發教程了。
  • 模型1秒進入遊戲引擎,下一波風口是 Unity BIM 應用開發?
    咱們繼續談模型應用,今天要聊的是曾經讓很多人頭大的應用開發。從2019年開始,我們發現越來越多的領域和 BIM 接壤,也有越來越多的公司開發了 BIM 相關的產品,今天咱們要說的是老牌遊戲開發平臺 Unity,以及它專門為 BIM 開發的軟體 Unity Reflect。
  • APICloud:雲端應用開發的硬核要素
    隨著雲計算相關領域近幾年的迅速發展,提供基於PaaS開發能力的平臺越來越多,這使得很多開發者在編寫後端程序的時候無需在伺服器上從零構建自己的應用,無需考慮網絡、存儲、作業系統、運行環境等與開發關聯不大的基礎配置。
  • iOS又可以'爽'了!iPhone應用IPA籤名工具自籤教學來了!
    /iosfans.cn/udid2.企業證書常年不穩定,一般使用幾天就失效3.部分用戶想自行籤名也就是個人蘋果id籤名安裝,需要藉助電腦端籤名工具電腦端籤名工具有Sideloadly[推薦]和愛思助手[備用]補充:個人蘋果id籤名有效期7天,1個Apple ID帳號7天內只能籤名3個應用Sideloadly