如何實現iOS和安卓跨平台的開發?

見一種方案是 c++寫底層 然後編譯成庫 供 ios 或安卓調用 有比較好的例子么


首先我推薦一個:react native,facebook推出的一個跨平台解決方案,去年推出了iOS版,手機淘寶的有一個模塊「猜你喜歡」就是用react native實現的,效果還不錯,另外今年9月份,facebook推出了android版,大家不妨試一下,這裡針對於webapp,做了一個比對:

相對於Webapp的優勢:

  1. 不用Webview,徹底擺脫了Webview讓人不爽的交互和性能問題;
  2. 有較強的擴展性,這是因為Native端提供的是基本控制項,JS可以自由組合使用;
  3. 可以直接使用Native原生的「牛逼」動畫(在FB Group這個app裡面,面板滑出帶一點果凍彈動,面板基於某個點展開這種動畫隨處可見,這種動畫用Native code來做小菜一碟,但是用Web來做就難上加難)。

相對於Native app的優勢:

  1. 可以通過服務端遠程更新JS,進而直接更新app的頁面;

相對於Webapp和Native的劣勢:

  1. 擴展性仍然遠遠不如web,也遠遠不如直接寫Native code;
  2. 從Native到Web,要做很多概念轉換,勢必造成雙方都要妥協。最終web要用一套CSS的閹割版,Native要費勁地把這個閹割版轉換成native原生的表達方式(比如iOS的ConstraintoriginCenter等屬性)。

另外我以前在CocoaChina上收藏過的一個帖子,整理了許多iOS和Android跨平台解決方案,感覺很不錯,現在拿出來分享給大家,希望對題主有幫助。

1、jQuery Mobile

jQuery Mobile是jQuery 在手機上和平板設備上的版本。jQuery Mobile 不僅會給主流移動平台帶來jQuery核心庫,而且會發布一個完整統一的jQuery移動UI框架。支持全球主流的移動平台。jQuery Mobile文檔比較全面,同時有在線工具幫你快速創建自己中意的UI風格。

技術需求:HTML,CSS,jQuery

平台支持: 絕大多數移動瀏覽器

2、Corona SDK(使用Lua語言):

Corona SDK的優點:

穩定;支持硬體加速、GPS、指南針及照相機等;支持與Map、Facebook、OpenFient、GameCenter的集成;內建的物理集成;Lua語言比較容易學習;

已經有了一些很不錯的應用,至少能夠證明這個SDK是可以做出優秀應用來的;不錯的社區支持。

Corona SDK不太好的地方:

只支持iOS和Android;Lua語言不是面向對象的;每年都要交授權費(99美元/年)。

另外還有其他的一些補充,比如:

對於Corona SDK不支持的第三方SDK沒法自己去集成;編譯項目的時候需要把代碼上傳到Corona的伺服器上去編譯,不能在本地直接編譯;無法擴展Corona的功能;物理模塊還有一些缺陷。

3、Airplay SDK(後來更名為Marmalade,不少大的公司在使用Airplay SDK,尤其適用於進行2D/3D遊戲的開發)

目前使用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這三種主流的桌上型平台。

5、PhoneGap

PhoneGap是一能夠讓你用普通NewsShow的web技術編寫出能夠輕鬆調用API介面和進入應用商店的HTML5應用開發平台。是唯一的一個支持7個平台的開源移動框架。PhoneGap的優勢主要體現在開發成本低,兼容性好,完全做到了「Written Once,Run Everywhere!」。

它使開發者能夠利用iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry智能手機的核心功能。此外PhoneGap擁有豐富的插件,可以以此擴展無限的功能。

PhoneGap在多個主要的智能手機設備上提供了以下功能的支持:

加速計、攝像頭、羅盤、通訊錄、文檔、地理定位、媒體、網路、通知(警告、聲音和振動)以及存儲等。如果正在為iPhone或Android設備做開發,那麼這些功能都是支持的。

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、AppMakr

Appmakr是一個在線工具幫助你創建移動應用,同時能夠幫助你將應用添加到app store中。你可以倒入RSS feed來生成一個移動優化的應用。不需要任何的編程,當然你可以添加自定義的HTML。

技術需求:懂HTML,CSS將會更有幫助

平台支持:iOS,Android,windows phone

10、iBuildApp

iBuildApp是一個創建移動應用的工具。擁有非常不錯的模板供大家選擇,而且你可以在iBuildApp Gallery里得到應用的特性。提供了很多選項添加到你的移動應用中,包括e-commerce和嵌入web頁面到你的應用。提供了Soap web服務允許你創建,獲取,升級或者刪除內容。

技術需求:懂HTML,CSS將會更有幫助

平台支持:iOS,Android

11、Widgetbox

Widgetbox提供了超簡單的方式來創建和運營簡單,基於內容的移動應用。你可以通過博客或者其它社交媒體的RSS來創建頁面。當然你也可以使用HTML和CSS。

技術需求:懂HTML,CSS將會更有幫助

平台支持:大多數的移動瀏覽器

12、foneFrame

foneframe是一個移動HTML5/CSS3的框架幫助你開發針對移動設備優化的web應用。你可以使用phonegap或者appmobi XDK來作為後端。同時也是一個不錯的構建mobile網站的工具。

技術需求:HTML5,javascript,CSS

平台支持:大多數的移動瀏覽器

13、PhoneGap Build

Phonegap的開發人員創建了一個機遇web的平台幫助你創建你自己的build。叫做PhoneGap build。這個服務目前支持iOS,Android,blackberry,webOS和Symbian。使用這個服務你可以上傳你自己的HTML5,CSS3和Javascript,PhoneGap build會幫助你生成你需要的文件,你可以直接發送到App store中。

14、appMobi XDK

appMobi XDK是一個基於雲的移動應用開發環境。作為Google chrome的插件存在。同時幫助你運行你的mobile應用,也能幫助你部署應用到app store中。雖然服務是免費的,他們提供了一些附加服務例如,消息推送和電子商務幫助你增強你的移動應用。

15、appcan(國內)

AppCan應用引擎支持Hybrid App的開發和運行。並且著重解決了基於HTML5的移動應用目前「不流暢」和「體驗差」的問題。使用AppCan應用引擎提供的Native交互能力,可以讓HTML5開發的移動應用基本接近Native App的體驗。


用什麼去實現,這取決於你要寫什麼類型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開發?

TAG:iOS開發 | Android開發 | Android |