入行文章指引
移動開發下Xamarin VS PhoneGap
跨平台開發
許多企業希望能夠通過開發移動應用程序,來提升企業業務水平,開發原生App時往往又缺少專業的Objective C 或 Java 移動開發人員。不僅如此,每種流行的移動平台都具有自身的開發語言,開發工具及特征,這就意味着開發一款應用需要花費三倍的開發時間,且需要維護三個項目。因此開發原生應用的代價是非常大的。
幸運的是,有很多公司已經在研究如何使原生APP的開發變得簡單,目前為止多平台的開發方法主要有兩種:
【原生:基於本地操作系統運行,本地CPU的目標執行,速度很快。對應的webApp基於網絡 瀏覽器..】
第一種方法就是以Web 應用為內核,填充到原生app中(PhoneGap提供的解決方案)。這種方法能夠吸引那些想要轉到移動開發的Web開發人員,使用這種方法開發的應用就是將網站包裝的像移動應用。
第二種方法就是使用跨平台的開發工具,這種工具提供一種通用語言開發原生App(Xamarin 提供的解決方案)。
Xamarin(Xamarin.Forms)可以讓開發人員用C#開發,再使用Xamarin.Forms轉換生成 iOS,Android, Windows Phone應用,Xamarin 比較受.Net 開發人員的喜愛。
兩種工具采用不同的解決方法,面向不同技術背景的開發人員,來實現跨平台應用開發。隨着兩大平台的流行,很多控件廠商也開發出支持這兩種平台的工具,如為PhoneGap 提供的Wijmo 5,為 Xamarin.Forms提供的Xuni 等,從而使移動開發更加快速高效,當然盡管有很多工具支持這兩種平台,但是無論是PhoeGap或是Xamarin沒有絕對的好與壞,因此如何選擇,主要取決於哪種工具能夠更有利於企業。下面我們就詳細對比PhoneGap 與Xamarin。
PhoneGap
開發人員使用PhoneGap 時,可使用 JavaScript,HTML5,CSS來開發。PhoneGap 提供了訪問移動設備特征的通用API接口,如傳感器,攝像頭等。這些應用程序稱為混合應用,既不是原生的(在WebView中渲染)也不是純Web的應用(需要訪問原生設備API,是安裝包的形式)可使用其他插件擴展PhoneGap 功能。最重要的是PhoneGap 是免費開源的。
Xamarin
Xamarin 提供利用.Net(Mono) 的開源實現的一個平台,開發人員可使用C#開發一次,Xamarin.Form就可同時生成iOS,Android,及Windows Phone 應用程序。Xamarin開發即可以使用Visual Studio,也可以使用其自有的 Xamarin Studio。Xamarin提供了高效的性能,提升了代碼的復用,可以充分利用C#語言和.Net 平台的優勢。
Xamarin VS PhoneGap
Xamarin.Forms | PhoneGap |
使用C#或XAML語言編碼 | 使用 JavaScript,HTML,CSS 編碼 |
開發iOS ,Android,WindowsPhone 應用 | 支持iOS, Android,WindowsPhone,Blackberry,Symbian,Bada,WebOS |
需要Xamarin許可證 | 免費開源 |
生成原生應用 | 應用程序不完全是原生的 |
高效 | 性能一般 |
應用程序在每個平台上都具有好的用戶界面 | 需要其他輔助工具才能在每個平台上實現好的用戶界面 |
大量的共享資源 | 開源庫,框架,相關平台優化的碎片 |
總結
每個開發人員需要選擇一款適合他們開發的解決方案。PhoneGap能夠提升web開發的技能,而Xamarin 致力於.NET 技術,是最直接的解決方法。盡管有很多工具支持這兩種平台,但是 PhoeGap 與 Xamarin 之間沒有絕對的好與壞之分。
工具選擇
Xamarin 技術全解析
Xamarin 是一套基於C#語言的跨平台移動應用開發工具,2016年2月份微軟宣布收購Xamarin,而后在4月份進行的Build大會上微軟宣布將會在各個版本的Visual Studio中免費提供Xamarin,並且宣布Xamarin SDK開源。
1、什么是Xamarin
Xamarin 是一個跨平台的移動開發工具,由 Mono 發展而來。開發人員可以使用 C# 為iOS,Android, Mac以及Windows Phone開發原生應用。
Xamarin 的跨平台開發思路是:使用 C# 來完成所有平台共用的,和平台無關的 app 邏輯部分;由於各個平台的 UI 和交互不同,再使用由 Xamarin 封裝好的 C# API 來訪問和操控 native 的控件,分別進行不同平台的 UI 開發。
如下圖:
另外Xamarin還提供了Xamarin.Forms UI工具包,Xamarin.Forms可以幫助開發人員快速的構建跨平台的UI,通過一次編碼,生成多個平台的原生UI界面,稍后本文會講述Xamarin.Forms的使用方法以及實現原理。
2、Xamarin能做什么
Xamarin主要由Xamarin.iOS,Xamarin.Android以及Xamarin.Forms組成,主要功能也有着三部分組成:
使用Xamarin.iOS來構建iOS原生應用
使用Xamarin進行iOS編程需要有一定的iOS App開發知識,需要熟悉iOS UI框架(Cocoa Touch)等等,即便使用Xamarin開發應用,也繞不過原生底層的這些東西。
使用Xamarin.Android來構建Android原生應用
使用Xamarin進行Android編程需要有一定的Android App開發知識,需要熟悉Android UI框架等等,原生底層的東西還是需要熟悉的。
使用Xamarin.Forms來構建跨平台的應用
Xamarin.Forms 是一個創建跨平台用戶界面的庫,通過Xamarin.Forms 可以一次編碼生成基於各個移動平台(iOS, Android, Windows Phone)的應用界面。
Xamarin.Forms提供了更高層次的一層UI組件抽象,這些組件在進行最終呈現的時候,會以原生控件的方式表現出來,也就是說每一個Xmarin.Forms的控件最終會有多個平台的原生呈現邏輯,如下圖中,Xamarin.Forms的Entry控件,對應的原生呈現為:
使用Xamarin.Forms構建跨平台應用的一個缺陷就是只能使用Xamarin.Forms包中的控件,會有一些限制。
如果想了解更多關於如何使用Xamarin.Forms構建跨平台應用,請參見文章:Xamarin.Forms入門-使用 Xamarin.Forms 來創建跨平台的用戶界面。
3、Xamarin實現原理
3.1 Xamarin.Android 實現原理
在講述Xamarin.Android架構之前,需要先了解一些Android應用程序的背景知識:
- Android應用程序試運行在Dalvik虛擬機中的,每一個應用程序對應一個單獨的虛擬機實例,其代碼在虛擬機的解釋下得以執行。
- Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
- 不同於Java虛擬機運行java字節碼,Dalvik虛擬機運行的是其專有的文件格式
Xamarin.Android架構圖(ART 是Android 虛擬機Dalvik):
Android Callable Wrappers(ACW)
使用C#開發的Android應用程序在運行的時候,C#代碼是在Mono虛擬機中執行的,而Mono虛擬機是寄宿在Dalvik虛擬機中運行的,所有的C#代碼都通過ACW的方式被調用。
由於需要打包Mono環境,使用C#開發的Android應用的APK文件會比原生開發的大,執行效率也會差一些。
Managed Callable Wrapper(MCW)
如果需要在C#中調用一些系統的功能或者Java實現的類庫,該如何調用那?
答案就是MCW,MCW就是一個JNI橋梁,可以使用托管代碼調用Android的代碼。MCW將整個Android.* 以及相關的命名空間通過 jar綁定的方式暴露出來,使得C#可以調用。
3.2 Xamarin.Forms實現原理
在Xamarin Studio中構建Xamarin.Forms跨平台的應用的時候,會生成Android以及iOS單獨的項目工程,兩者共享業務邏輯以及一些UI界面,在打包生成App的時候,是分開進行的,兩者互不影響。每個平台的實現原理與上面講的是一樣的。
3.3 支持Xamarin的工具
在微軟收購 Xamarin 之后,全球最大的控件公司葡萄城馬上做出反應,在知名的 ComponentOne Studio 產品中加入了 Xamarin 平台。
Xamarin 平台為 Visual Studio 提供靈活的原生移動開發 ,給原生移動應用提供出色的圖表、儀表盤和表格控件。
ComponentOne Studio Enterprise 是一款專注於企業應用的.NET全功能控件套包,支持 WinForms、WPF、UWP、Xamarin、ASP.NET MVC 等多個平台,幫助您在縮減成本的同時,提前交付豐富的桌面、Web和移動企業應用。控件支持的范圍廣泛,包含了表格和數據管理、圖表和數據可視化、流行的UI界面等,為您的企業應用開發提供高性能的控件工具。
了解更多信息請訪問 ComponentOne Studio官網
Xamarin.Forms入門-使用 Xamarin.Forms 來創建跨平台的用戶界面
Xamarin 學習筆記 - 配置環境(Windows & iOS)
Xaramin學習資源
博客
1、官網
3、葡萄城技術團隊
4、Jesse
5、shanyou
6、大學霸
書籍