移動互聯網技術選型之APPS跨平台開發技術
技術的重要性有時不只在創造多少價值,更重要的是幫你避開了多少大坑。移動互聯網造就了很多神奇的公司,不知不覺你用著APP改變了生活習慣,有的靠社交讓你一日難離,有的靠交通讓你出行想起,有的靠支付讓你無現金交易,衣食住行都離不開了APPS。
APPS既然如此重要,今天我就來回顧移動互聯網中,APPS開發的跨平台技術。APPS開發Android,IOS各移動平台跨平台技術多種多樣,沒用過的看不清摸不透,往往被他們的廣告所吸引,曾經大家以為在移動終端上可以像PC那樣通過 Web 技術來實現跨平台開發,但卻大多因為性能或功能問題而中途放棄,公司決策的失誤會造成大量資源的浪費, 特別在移動互聯網領域時間為最大的成本,錯過了風口的創業公司最後可能很難存活。
我們先來了解一些概念,手機研發其實是一種嵌入式開發,移動端APP的研發是基於嵌入式系統的開發,其實不少人都搞不清楚什麼是嵌入式開發。嵌入式開發就是指在嵌入式操作系統下進行開發,一般常用的系統有Linux, Android,IOS, LJ, Symbian等。另外,用c,c++或彙編開發,用高級處理器,arm9,arm11,powerpc,mips,mipsel等,加上操作系統也屬於嵌入式的開發。嵌入式系統(Embedded System)是指以應用為中心、以計算機技術為基礎,軟體硬體可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統,也就是說每個嵌入式設備其實軟硬體都是專門配套的,也就決定了在其上開發的複雜性,面對不同系統版本,不同硬體設備的表現往往不同,做精產品技術需要考慮的問題就更多。
APPS跨平台開發技術,最大的賣點在於號稱降低開發成本,誰不想降低開發成本呢,近期出現的 React Native 再次讓跨平台移動端開發這個話題火起來了,還出現了許多其他方案,那麼近年來這些技術方案靠譜嗎?
我將它們分為五大門派:
一,Web 派:例如,H5。例如,IBM的Worklight, Hybrid 技術它基於 Web 相關技術來實現界面功能;
二,代碼轉換工具派:把一種語言轉成 Swift,Objective-C、Java 或 C#,然後使用不同平台下的官方工具來開發;
三,編譯派:把一種語言編譯為二進位文件,生成so動態庫,dll靜態庫或打包成 apk/ipa/xap 文件;
四,虛擬機派:把一種語言的虛擬機移植到不同移動系統平台上來運行;
五,React Native派:結合了 Web 應用和 Native 應用的優勢,可以使用JavaScript 來開發 iOS 和 Android 原生應用。在 JavaScript 中用 React 抽象操作系統原生的 UI 組件,代替 DOM 元素來渲染等。React Native使你能夠使用基於 JavaScript 和 React 一致的開發體驗在本地平台上構建世界一流的應用程序體驗。
Web 派:
瀏覽器,比如 Webkit,Safari,Chrome,第三方Browser等;比如著名的 PhoneGap/Cordova方案。瀏覽器方式很容易理解,HTML5應用就是Web頁面,用戶通過瀏覽器打開URL,然後進入瀏覽器的全屏模式或者App模式操作,也可以通過點擊一個事先創建好的快捷方式打開應用。這種方式的性能取決於瀏覽器本身對HTML5的支持情況,一般來說要優於Webview組件的方式,但是問題在於不同的瀏覽器有差異,而且通過瀏覽器運行HTML5較難做到類似原生應用的體驗(應用切換/許可權管理/系統資源訪問/整合等)以及豐富的API支持。由於iOS的限制(iOS不允許應用使用使用除iOS UIWebView之外第三方的JIT--即時編譯引擎),目前Crosswalk也沒有辦法提供直接的支持。Web 派最被吐槽的就是性能慢。排行第一的問題,一直難以解決。特別早期瀏覽器實現比較差難以優化。CSS 過於複雜計算起來也更耗時。DOM 提供的介面有限。Web 派更嚴重的問題是功能缺失,例如,蘋果 iOS 8 就新增 4000+ API,而 Web 標準需要漫長的過程,增加 4000 API 您這輩子恐怕是等不到了,即便是 Cordova 這樣自己封裝也忙不過來啊,為了更好地用系統新功能,寫 Native 原生代碼是必須的。
代碼轉換工具派
Android上開發語言以Java和C++為主,IOS上可用OC/C,Swift,,不同移動平台上的官方語言不一樣,這會導致同樣的邏輯要寫兩次以上,於是就有人想到了通過代碼轉換的方式來減少工作量。這種方式雖然聽起來很離奇,但它卻是風險和成本最小的,因為代碼轉換後就可以用官方提供的各種工具了,和普通開發區別不大,因此不用擔心遇到各種詭異的問題。但實際上很多APP 來說共享不了多少代碼,因為移動應用大多數圍繞 UI 來開發的,所以公共部分不多而且一般都是通用類和框架,有經驗的直接複製粘貼就可以了,這種方式還涉及到可讀性的問題。幾乎各種組合各種平台語言轉換工具都有嘗試。
編譯派:
編譯派比前面的代碼轉換派更進一步,它直接將某個語言編譯為普通平台下的二進位文件,這種做法有明顯的優缺點:優點:可以重用一些實現很複雜的代碼,比如之前用 C++ 實現的遊戲引擎,重寫一遍成本太高;編譯後的代碼反編譯困難;缺點:如果這個工具本身有任何 Bug 問題,修改成本會很高,苦逼的說基本很難完成。編譯後體積很大,尤其要支持 ARMv8 和 x86 的情況。
C++ 是最常見的選擇,因為目前 Android、iOS 等都提供了 C++ 開發的支持;apportable 可以直接將 Swift/Objective-C 編譯為機器碼,但它的成功案例全部都是遊戲,所以APP就別指望了。Go 從 1.4 版本開始支持開發 Android 應用(並將在 1.5 版本支持 iOS),不過前只能調用很少 的 API,比如 OpenGL 等,所以只能用來開發遊戲,但明顯不靠譜,現在還有誰直接基於 OpenGL 開發遊戲?
虛擬機派:
除了編譯為不同平台下的二進位文件,還有另一種常見做法是通過虛擬機來支持跨平台運行,JavaScript , Lua 都是天生的內嵌語言,所以在這個流派中很多方案都使用他們。不過虛擬機派會遇到兩個問題:一個是性能損耗,另一個是虛擬機本身挺佔地的。Java虛擬機,前段時間推出的 NativeScript,它的方法說白了就是用工具來自動生成 wrapper API,和系統 API 保持一致。
Titanium 應該不少人聽過,它和 PhoneGap 幾乎是同時期的著名跨平台方案,和 PhoneGap 最大的區別是:它的界面沒有使用 HTML/CSS,而是自己設計了一套基於 XML 的 UI 框架 Alloy。
React Native派:
React Native 思路簡單來說就是在不同平台下使用平台自帶的 UI 組件。
React使用許可協議的官方聲明,稱任何人不能將React用於Facebook及其合作公司有直接或間接競爭關係的項目中,否則 Facebook 公司自動取消其使用許可。對於使用了React的公司來說,存在將專利拱手讓人,將所有項目框架遷移重構的風險。這不但開發量大成本高,而且在遷移完畢後,不論是用戶體驗還是穩定性,都很可能達不到遷移前水平。
WordPress是一種使用PHP語言開發的平台,用戶可以在支持PHP和MySQL資料庫的伺服器上架設屬於自己的網站,也可以把WordPress當作一個內容管理系統(CMS)來使用。近年來WordPress幾乎所有項目都基於React開發,然而WordPress創始人Matt在其博客上發文,稱決定停止使用React,原因則是專利問題。他表示WordPress最近幾年對React滿意,不過還是決定放棄React,並已經和開發者進行交流,開始進行新的技術選型。
百度也已經要求外部產品線停止使用React / React Native等Facebook下涉及特定專利條款的開源產品,給半年時間來轉型。內部產品如果是新產品,則不能使用React。百度內部也在自研React Native的替代方案。
結論:
APPS跨平台開發技術有那麼多方案,五大門派中的武功各有長短。如果你只會 JavaScript,那目前可以用 React Native。如果你只會 Java,那可以嘗試 RoboVM 或 j2objc,j2objc 雖然目前更穩定靠譜,但它不能像 RoboVM 那樣完全用 Java 開發,所以你還得學 Objective-C 來寫界面,而 RoboVM 的缺點就是太穩定,除了遊戲以外還沒見到比較知名的應用使用,而它這種方案註定會比 j2objc 更容易出問題,所以你得做好掉坑裡的準備。如果你只會 C#,那唯一的選擇就是 Xamarin 了。如果你只會 C++,可以做做遊戲或非 UI 的公共部分,還是學學 Native 開發吧。如果你只會 Go,還別指望用它開發移動端,因為目前的實現很低效,而且這和 Go 底層的實現機制密切相關,導致很難優化,所以預計很長一段時間內也不會有改觀。如果你會 Rust,說明你很喜歡折騰,多半也會前面所有語言。如果你不懂OC(swift), JAVA,我建議你還是學一種吧,面向對象的語言相通,學習很快而用處很多,技多不壓身。如果你想做一個專業的移動開發者,我建議一定要學會原生開發,不要排斥,他的魅力和強大絕對能讓你滿意。
當然,上面都是針對個人的,對於公司和團隊來說,目前原生開發仍為最佳選擇。功能強大開發方便,性能更好體驗更佳。然後可考慮嘗試混用內嵌的方案,及一些完全理解的新技術。技術遠比想像的深奧,這兩年青澀的技術過兩年可能隨著技術發展而成熟。現在大多數移動開發者還只是在手機APP層內的技術應用,更熟悉這一層的API,而不熟悉更深層的引擎和系統平台特性,所以在技術選型的時候要格外慎重,規避後面問題的產生。防患於未然,選擇最佳技術方案,給組織發展提供有力保障。


TAG:全球大搜羅 |