如何實現iOS和安卓跨平台的開發?
見一種方案是 c++寫底層 然後編譯成庫 供 ios 或安卓調用 有比較好的例子么
首先我推薦一個:react native,facebook推出的一個跨平台解決方案,去年推出了iOS版,手機淘寶的有一個模塊「猜你喜歡」就是用react native實現的,效果還不錯,另外今年9月份,facebook推出了android版,大家不妨試一下,這裡針對於webapp,做了一個比對:
相對於Webapp的優勢:
- 不用Webview,徹底擺脫了Webview讓人不爽的交互和性能問題;
- 有較強的擴展性,這是因為Native端提供的是基本控制項,JS可以自由組合使用;
- 可以直接使用Native原生的「牛逼」動畫(在FB Group這個app裡面,面板滑出帶一點果凍彈動,面板基於某個點展開這種動畫隨處可見,這種動畫用Native code來做小菜一碟,但是用Web來做就難上加難)。
相對於Native app的優勢:
- 可以通過服務端遠程更新JS,進而直接更新app的頁面;
相對於Webapp和Native的劣勢:
- 擴展性仍然遠遠不如web,也遠遠不如直接寫Native code;
- 從Native到Web,要做很多概念轉換,勢必造成雙方都要妥協。最終web要用一套CSS的閹割版,Native要費勁地把這個閹割版轉換成native原生的表達方式(比如iOS的ConstraintoriginCenter等屬性)。
目前使用Marmalade的遊戲有《割繩子》、《植物大戰殭屍》、《你猜我畫》、Build "n" Bash 3D、Catch the Monkey、Need for Speed Shift以及WorkSnug Pro等多款遊戲。
Airplay SDK文檔中還包含多個示例。「感覺受到限制」的開發者還可以在Airplay SDK上進行擴展。開發者需要對C++比較熟悉。4、Appcelerator(Titanium)Appcelerator允許使用HTML/Javascript來開發原生app,開發者可以免費使用。目前世界上185個國家中有超多46萬的開發者在使用Appcelerator提供的解決方案。Titanium為Appcelerator於2008年底所推出的跨平台應用程序開發解決方案,目前支持iOS/Android/Blackberry/WM7等行動平台,以及Windows/Linux/OS X這三種主流的桌上型平台。PhoneGap和Appcelerator的社區支持做的非常不錯。 PhoneGap中文論壇:PhoneGap跨平台開發論壇,致力於跨平台開發分享!
6、Rhomobile(基於Ruby的手機軟體開發框架)Rhomobile是一款基於Ruby的手機軟體開發框架,用於編寫並發布跨越多個移動平台的應用程序,程序只需編寫一次就能在各種平台上運行。Rhomobile要求用戶只要掌握HTML和Ruby就可以開發iPhone軟體。它目前支持為iPhone、BlackBerry、Windows、Symbian和Android平台創建應用。開發者使用HTML/JavaScript/VSS/Ruby等技術開發應用。Rhomobile表示自己遵循蘋果的開發者授權。7、Sencha Touch 2 Sencha Touch是一個基於HTML5的移動應用開發框架,其前身是Ext。使用Sencha Touch,開發者可以構建在iPhone、Android和BlackBerry touch等設備上運行的移動web應用,其效果看起來如同本地應用。目前Sencha Touch已經成為構建移動HTML5應用的領先框架。
技術需求:HTML,CSS,Javascript,一般web開發知識8、Tiggzi 用jQuery Mobile作為基礎,tiggzi是一個拖放開發工具用來開發移動應用。你可以添加標準的按鈕,菜單,視頻,地圖等等到你的移動應用中,並且能夠綁定事件。技術需求:HTML,CSS,javascript,XML平台支持:iOS,Android,移動web
9、AppMakrAppmakr是一個在線工具幫助你創建移動應用,同時能夠幫助你將應用添加到app store中。你可以倒入RSS feed來生成一個移動優化的應用。不需要任何的編程,當然你可以添加自定義的HTML。技術需求:懂HTML,CSS將會更有幫助平台支持:iOS,Android,windows phone用什麼去實現,這取決於你要寫什麼類型app,以及寫這app目的是什麼。
開發app一般可分為有三種方法。一是腳本語言開發,二是編譯性語言開發,三是原生開發。
腳本語言開發。基於Html的Webapp也好,基於Javascripts的React Native也罷,包括新出的微信小程序,它們都屬腳本語言開發。優點是學習門檻低,上手簡單,很快就看到結果。但缺陷也是明顯的,而缺陷根源可說都一樣,都要基於虛擬機(VM)。Webapp,需是一個Html解釋器,React Native需要一個Js解釋器,微信小程序是微信提供這個解釋器。解釋器向外提供的功能決定了app能做什麼,這也正是經常有人說,擴展性受限。當然,加快SDK更新頻率可緩解這問題,可也只能說是緩解,用戶對app日益增長的功能需要和解釋器能提供的功能之間矛盾依舊存在,而且是永久性存在。
如果要寫功能比較傳統的app,像商城、新聞、金融理財(非交易),或許可用腳本語言開發,如果想寫遊戲,那趁早放棄。好的遊戲對界面要求很高,流暢觸擦、酷炫動畫、非規則按擊。虛擬機除了不可能抽像出這麼多界面效果,還很難實現一些方面,像按需內存分配、直接和硬體交互、安全。什麼是按需內存分配,想像下超級瑪麗,瑪麗一直朝前走,出現的環境地圖一直在變,如何載入、銷毀(總不能加了不丟,這很可能倒致內存耗盡)場景圖像,這要使用按需分配內存。硬體交互典型例子是藍牙,對控制攝像頭拍照,因為需要操作不多,VM或許可抽像出絕大部分功能,但藍牙操作不僅多,特徵上傳的數據繽紛多樣,還涉及到app進入後台怎麼辦,VM是不可能對這些做「全部」抽像的。安全像加密、解密、數字簽名、網終安全傳輸,不管是可逆還是不可逆加密系統,它們分兩部分,演算法和密鑰。理論上說,只要密鑰不公開,演算法無所謂被別人知道。但實際上,密鑰不可能做到完全保密,於是有人想到隔段時間換密鑰,可這往往不夠,於是為安全考慮,尤其涉及到交易時,也不會公開演算法。這就造成一個死結,虛擬機做不到可信任安全。——界面、內存、硬體、安全等等,它們根源還是解釋器提供不了app需要的功能。
編譯性語言開發。當前移動平台可說就存在兩種編譯性語言:C/C++和ObjectC。ObjectC只能用在蘋果系統,對跨平台來說可直接忽略,那隻能是C/C++,而要知道的是:不管是PC還是移動設備,市面流行的操作系統都原生支持C/C++編寫App。因為C/C++的高效率、跨平台特性,市面上存在不少基於它的跨平台庫。這些庫有一個共同缺點,當然這其實是C/C++缺點,那就是相比腳本語言,學習門檻高,上手慢,學習需要毅力和耐心。這裡揀幾個說說。
QT。這語言歷史網上已說得很詳細,它是現在用的最廣的C/C++跨平台SDK。在此有人會有疑問,既然最廣,怎麼在國內對這語言討論好像不多。為什麼有這結果,這和ubuntu有關。ubuntu是個linux操作系統,如何寫ubuntu上的GUI app?當GTK+和GNOME落敗,基本就剩QT一條路了。直白說,如果你想寫ubuntu上的GUI app,那就得用QT。可惜,國內是個例外,Windows一統桌面,linux基本當伺服器,不用寫GUI app。有人從官方網看到QT一樣支持iOS、Android,而且QT是從諾基亞發家,諾基亞那時主要把它用在手機,怎麼還不是一個好的移動設備開發SDK?這就和SDK設計模式有關。當你準備把這SDK用在移動平台時,那你就要從移動平台的特性去設計,而對於桌面app功能,該放棄的就要放棄,像非模態對話框、支持多場景。當SDK變得大而全時,沒有竟爭對手、獨一家還好,否則遲早要失敗。QT提供了數百個類,功能全,而它在移動平台上失敗可說也是因為這個全。面對這麼多東西,開發者會變得無從下手,它們更喜歡能直達目的地的SDK,儘管這SDK提供功能並不是很全面,Cocos2d-x就是這樣一個SDK。
Cocos2d-x。一個開源的移動2D遊戲框架,它的目的很純粹,就是專為跨平台遊戲開發。針對遊戲場景,Cocos2d-x提供了很強的輔助編輯器。Cocos2d-x的確很成功,據統計,國內iOS遊戲一半以上是用它寫的。所以如果你只是為開發遊戲,可試著去用這框架。當然,它的缺點很明點,不適合寫非遊戲類app,由於座標等問題,而且是你即使努力了也可能沒結果。這是知乎上是一個貼子,可作參考,cocos2dx 開發非遊戲應用是否可行?。到此有人會問,難道當前就沒有一個出眾的能適合所有app類型的C/C++ SDK?接下讓說下SDL。
SDL。一個開源跨平台開發庫,使用C語言寫成,向外提供的介面全是C,沒有C++。SDL曾風光過,有個叫《文明》的知名遊戲,早期版本是基於它寫的;Android Studio還沒出來前,官方那個基於Eclipse的IDE、當中模擬器是基於它的。即使現在,一些遊戲是用它寫的,像韋諾之戰,ffmpeg官方用它寫了播放器示例。既然有這麼多光環,為何國內開發人員好像不知道似的。這就和SDL提供的功能有關,雖然它不斷推新版本,很好支持新平台,像iOS、Android,但它向外提供的API可說依舊那幾個。你想畫控制項,即使是一個標籤(label),它不提供的,你要自個寫,別說更複雜的編輯框、列表、樹形視圖、等等。對開發者來說,C/C++語言學習時間本來就要長,如果再加上連控制項都要自個寫,那只是應驗一句話:光有熱情是不夠的,你得出利益。可正由於SDL輕量性,它就是個任人打扮的小姑娘,是用於遊戲也好(包括3D,它已向外提供OpenGL/OpenGL ES),播放器也罷,還是操作藍牙,它都能勝任。SDL有這優勢,自然會有人想到基於它再寫一個SDK,讓它去實現窗口子系統這功能,——這自然是有不少人想到了,這是去年9月官方論壇給的一個基於SDL的SDK匯總,SDL :: View topic。不得不說,不怎麼樣。這裡說下我自個,要找到一種徹底跨平台解決方案,只能通過C/C++,而跨平台SDK要做的事很多,要對它進行模塊化,至少要把平台相關的、非平台相關的分開。於是我看中了SDL,並在寫基於它的SDK(中文SDL)。
原生開發。用原生語言開發,iOS是ObjectC+swift,Android是Java+C/C++,Windows是C# + C/C++,想跨平台就免了。
為什麼說選哪種SDK和你寫這app目的相關?腳本語言有個特點,容易被替代。用句不中聽話說,你今年學了用這SDK開發app,後年這SDK可有就沒落了。腳本語言建立在VM之上,功能是實現了,至於實現細節是什麼,那都是黑盒子。舉個例子,在webrtc中,你知道用getUserMedia可啟動本地媒體,但不知道內里是怎麼開啟攝像頭、麥克風、搜索能用的編、解碼器。編譯性語言的生命期則很長,沒人敢說C/C++哪天會不用了,而VM各種功能模塊的內中細節往往都是用C/C++去實現。加上C/C++是各語言「母語」,一旦熟悉了C/C++,再學腳本語言也變成輕易事。
總的來說,如果是寫界面比較傳統的app,像商城、新聞、金融理財(非交易),可選擇腳本語言,像之前有人說的React Native,由於它直接調原生控制項,性能會比基於Html的好。如果只是想寫2-D遊戲,可考慮Cocos2d-x,3-D的則用unity3d。如果只想學一種SDK就「徹底」解決各平台下各種類別的app,可用SDL,這尤其包括寫app目的是想學習跨平台編程知識的在校生。你需要Xamarin
Cordova
xarmarin VS2015
unity千秋萬代
同時用過unity和react_native.
組件:
unity很多組件沒有,要自己做,但是可以asset store買app專用的ui套件。
react native,github一大把,樣式多。
ractnative 勝利。
熱更:
unity雖然熱更方案也很多,但是都是各種繞彎彎。
react native天生支持熱更,不解釋。
ractnative 勝利。
運行效率:
unity 遊戲引擎,每秒60fps(當然你也可以鎖幀),費電。
react native 只在狀態機變化的時候,才變化,相對省電。
ractnative 勝利。
開發效率:
unity所看即所得+vs大法,天下無敵。
react native 所看非所得,開發效率和一般前端開發差不多,和u3d比,差很多。
綜合:如果讓我選,我選u3d,因為快。。。。
c++加QT全搞定
Adobe AIR
Sencha Touch or Jquery Mobile。實質上是webview。一套代碼可以通過不同平台打包。
Office、微信等都這樣,只是成本高。一般的還不如找2個開發分別做
之前找工作的時候有家公司不讓我寫oc,需要ionic,說是跨平台開發的。之前一點都不懂,面試通過之後回去查資料,發現確實在國外蠻火的,但是最後沒有去。你猜為什麼
推薦閱讀:
※既然 Android 免費,那 Google 是靠什麼賺錢的?
※Windows平板電腦能否作為大屏手機使用?
※怎樣選擇一個好的Android手機?
※有哪些關於 Android 開發的博客值得訂閱?
※BAT裡面一般用什麼工具做Android開發?