創作內容

0 GP

行動 app 開發

作者:樹上的Apple不能吃│2021-01-25 01:06:15│贊助:0│人氣:39
我真的很懶惰想個開頭,所以就直接講重點好了。

目前來來去去行動應用程式開發無非就這三種:
  1. 原生型 (Native)
  2. 網頁型 (Web)
  3. 混合型 (Hybrid)

原生型應用程式 Native App

顧名思義就是根據行動作業系統來開發並運行最最最原生的 app。程式語言、工具、文檔、架構和庫 (Libraries) 都是使用原生作業系統提供的。

目前行動作業系統不是 iOS 就是 Android,所以:
作業系統 開發商 程式語言 工具 架構和庫
iOS Apple Swift (主流)
Objective-C (傻子才用,除非是維護舊專案)
Xcode (僅支援 macOS) UIKit
SwiftUI
Android Google Kotlin (官方瘋狂地在推)
Java (排行榜上的前三名)
Android Studio (支援 Windows, macOS, Linux, ChromeOS) 沒有正式名字

優點:
  1. 可以直接使用原生 API 和訪問裝置的各種功能:相機、電話、GPS
  2. 具備最完善的功能
  3. 因為程式語言可以直接編譯成機器原生碼,所以運行效率非常快 (快還要更快),運行時非常流暢,穩定性也非常高 (很少閃退卡死,除非是你自己寫得爛),體驗最好
  4. 可以離線運行 app (取決於 app 本身的功能是否需要連結網路)
缺點:
  1. 開發成本太龐大,原生開發至少需要兩個團隊——iOS 團隊與 Android 團隊來為各自的作業系統開發相同業務邏輯的 app
  2. 不能跨平台 (SwiftUI 實際上不算真正意義的跨平台,macOS 和 iOS 的 Media, Core Service 和 Core OS 幾乎一樣)
  3. 學習成本和門檻高,需要精通該作業系統的整體架構、API、庫及語言。如果同時學習 iOS 和 Android 原生開發門檻會更高
  4. App 本身會比較龐大
  5. 只能通過 App Store (iOS) 和 Play Store 下載 (Android,不過開發者可以額外提供 APK 安裝包)

網頁型應用程式 Web App

使用網頁技術開發並直接使用行動裝置提供的瀏覽器運行 app。程式語言無非就這五大護法:HTML + CSS + JavaScript + PHP + SQL。知名網頁架構有 React, Vue 和 Angular。

HTML:網頁的整體骨架
CSS:幫網頁美容
JavaScript:負責邏輯運行和前端運作 (比如按一個按鈕就會顯示 YES)
PHP:負責與伺服器進行溝通及後端運作
SQL:向資料庫提取關鍵資料

優點:
  1. 開發難度最低,適合 Web 開發者進行開發
  2. 開發成本最低,同樣的程式碼可以在各個作業系統的瀏覽器游刃有餘,而且隨時支持即時更新與維護
  3. 不需要將 app 上架到應用商店,所以不需要被審核
  4. 用戶不需要安裝該 app,只需要使用瀏覽器就可以直接使用
缺點:
  1. 沒網路就無法使用
  2. 無法直接訪問裝置功能
  3. 運行速度最慢,效能最爛,體驗極其糟糕
  4. 有強迫用戶下載並安裝 app 的嫌疑 (噁心又賤)

混合型應用程式 Hybrid App

市面上最主流的開發方式,結合了 Web 的低難度低成本和原生的高效能豐富功能。開發者可以根據業務邏輯與用戶需求在特定頁面使用原生或者 Web 或者兩者全都要。

最重要的就是:可以跨平台,一大坨程式碼可以在任意地方使用。(Write once, run everywhere)

目前最常見的混合型架構為 React Native (源自於 React,開發者為 Facebook) 與 Flutter (Google 創立的架構,目的是統一所有開發行動 app 的方法)

Xamarin 倒是很少見,大概就只有 Microsoft Office 使用。

混合型架構 開發商 商業許可 程式語言 界面渲染 熱更新 平台
React Native Facebook 免費,開源 JavaScript 通過 JSBridge 與原生組件溝通 支援 iOS/Android/Web
Flutter Google 免費,開源 Dart 使用自帶的 Skia 引擎渲染自定義組件 不支援 iOS/Android/Web/macOS/Windows

優點:
  1. 開發效率最好,一套程式碼可以在任意平台運行。程式碼復用率非常高 (除了少部分需要根據作業系統進行修改),維護方便
  2. 運行效能與穩定性比網頁型來的好
  3. 和原生型一樣可以訪問裝置的各種功能與 API
  4. 可以跨平台運行及開發
缺點:
  1. 運行效能、穩定性與體驗仍然不如原生型
  2. 有可能會在應用程式商店被下架的風險 (App Store 禁止任何熱更新)
  3. 對於網速的要求比網頁型高
  4. Flutter 相比 React Native 還不是那麼地成熟 (雖然文檔給得非常足);React Native 運行效率不佳,同時對 UI 妥協了太多。

這三種開發我該先學哪一種?

哪一種都可以,你爽就好。不過我會推薦從原生型開始學起 (打個基礎)。學 iOS 開發還是 Android 開發還是兩個都學仍然取決於你自己。

如果你本身對 Web 開發有非常硬的底子我會推薦先試試開發網頁型。

最後再學混合型開發,不過原生型學混合型會比網頁型學習混合型更容易上手,因為混合型開發還是必須涉及原生程式碼。


如果有人告訴你別學 iOS 開發,反正要沒落,你當他在說廢話就好。

不然你也可以嘴回他:App Store 上的程式賺的錢還比 Play Store 上來的多呢,呵呵。
當然 30% 抽成我就不講了,反正最後會引戰……


網頁型會徹底取代 app 型 (原生或混合) 嗎?

我告訴你:在行動裝置上幾乎不可能。

網頁型再怎麼強大,仍然被局限在 WebView 和瀏覽器裡,而且幾乎沒辦法直接訪問裝置硬體的功能。
再加上很多開發商 (尤其是中國軟體開發商) 就是故意把行動網頁型應用程式做得非常爛,好讓用戶主動選擇使用 app。

說白就是行動裝置的螢幕太小,不可能像桌上型或筆記型電腦 everything goes web. 這簡直就是天方夜譚。


再來說一下 UIKit 和 SwiftUI 的不同。

UIKit 提供了一個 Storyboard,開發者可以自行把原生 UI 組件拖放到 Storyboard 上,再與程式碼建立起 @IBOutlet 和 @IBAction 連結。之後再來調整組件的 constraint 進行位置固定。

雖然 UIKit 能夠以 Swift 調用,但骨子裡還是 Objective-C。沒辦法 UIKit 本身就很老舊了,從 iPhone OS 就一路持續到現在,然而 Swift 在 2014 年正式推出。

而 SwiftUI 是比大麻還純的純 Swift 架構,強調 iOS, macOS, tvOS, watchOS 之間的跨平台 (不需要單獨以 UIKit 和 AppKit 開發同一種軟體),以聲明式進行程式設計 (寫過 React Native / Flutter app 都知道我在說什麼)。iOS 14 上的小組件也是以 SwiftUI 進行構造。

相比 UIKit,通過 SwiftUI 寫出來的程式碼更加整潔,而且不需要拖放 UI 組件和建立 @IBOutlet / @IBAction 連結。不過缺點也很明顯:
  1. SwiftUI 在 2019 年發布,雖然已經到了 2.0 不過相比 UIKit 還是不怎麼穩定
  2. SwiftUI 只支援 iOS 13, iPadOS 13, tvOS 13, watchOS 6, macOS 10.15 Catalina 或後續版本。也就是說 iOS 12 與 macOS 10.14 Mojave 還是只能用 UIKit.
  3. 現階段大部分在 iOS 平台上出現 app 都是以 UIKit 為主,要全面過渡 SwiftUI 需要很久的時間
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5052099
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★klpeople 可決定是否刪除您的留言,請勿發表違反站規文字。

後一篇:聊一點 K-Pop 的事...

追蹤私訊切換新版閱覽

作品資料夾

Flammen123你各位
當一個政府連自然環境都不肯保護和重視 你就知道情況不妙看更多我要大聲說昨天18:13


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】