[Xamarin] 什麼是Xamarin? Xamarin家族,Xamarin.Android、Xamarin.IOS、Xamarin.Forms介紹與比較

[Xamarin]什麼是Xamarin? Xamarin家族,Xamarin.Android、Xamarin.IOS、Xamarin.Forms介紹與比較

前言


首先,感謝James與Maduka兩位MVP老師的指導,

幫助在撰寫此文時幫助我解除了不少的疑惑!!! =)

 

第一部分、什麼是Xamarin?


Xamarin,它的前身為Mono,後來先發展出Xamarin.Android、Xamarin.IOS才發展出Xamarin.Forms

它的誕生,目的就是為了讓工程師們只需要靠著C#一種語言,

就能同時開發IOS、Android、windows app三個平台的程式

因此跨平台便是Xamarin的最大特色

我們可以參考下圖(此圖節錄自Xamarin官網)


只需一種語言,就能同時開發三個平台,對於工程師來說這件事情喜聞樂見,但這件事情發展起來有這麼容易嗎?

 

第二部分、Xamarin的限制


Xamarin並非一開始就具有能夠同時開發三個平台的特性,

想要「跨平台」這件事情說起來好像很簡單,但一種語言就能開發三種平台真有那麼容易嗎?

當然,限制是一定有的,最大的問題就出在「UI」

我們可以把UI比喻作衣服,

一般人通常都有兩手兩腳(這裡先不討論例外狀況......)

這樣來說,一件衣服,只要做出兩手兩腳,應該正常人都能穿得下

可是,人的體型有高有矮,有胖有瘦,有男有女,

做一件衣服或許簡單,但做一件大家都「合身」的衣服那可就是難事了呢。

因此,Xamarin發展的當初,也只有先整合了每個人都有兩手兩腳的基本特性作為Backend,

但對於各平台各自的UI控制項,在這個階段的Xamarin還是沒有辦法解決的。

 

 

但,聰明的工程師們想到了一些方法嘗試解決了這個問題,哈哈 =)

 

第三部分、Xamarin.Forms的誕生


上面提過了,Xamarin強大的地方在於它跨平台的特性,而它也因此天生最大的限制就是在UI,

人有高矮胖瘦,程式也有不同平台獨特的UI控制項,

想做一件大家都能「合身」的衣服,或許沒有想像中的那麼容易,

為了嘗試解決這個問題,我們對於我們原先的想法做了一點變化,

原先的方式,我們面對到最大的問題就是各平台的UI控制項差別十分的大,

但如果我們調整一下,我們不要太要求「完美」的合身,

而目標是讓每個人都能穿,且同時保有這衣服的特色,

好似這問題的解答就這樣呼之欲出.......

(投影片來源:Introduction to Xamarin.Forms from Xamarin)

我們仔細觀察上面這張圖(page 2)

左邊是傳統 Xamarin 右邊是後來發展而出的 Xamarin.Forms

在左邊,因為不同平台UI控制項長的不同,我們將各自的獨立出來處理,

而在右邊,我們嘗試著將UI設計為同一種大家能共用的形式,

這樣我們只需一份程式碼,就能在各大平台共用,

但上述我說的問題怎麼解決的呢?

事實上,他並沒有被解決,

硬要做一件衣服是適合大家穿的,不是不可能,可是限制就會非常的多

回頭來看,我們想要試著使用一種語言整併三個平台,

能共用UI的控制項就會相對非常非常的少

所以太過於花俏、複雜的畫面,甚至是各平台獨特的UI控制項,

很抱歉,在Xamarin.Forms中你只能放棄它,

(或者,如果不怕麻煩的話,你可以很認命的慢慢把它刻出來XD)

但這不表示它不好,只是它強大的地方不在此處,而在一套程式碼就能橫跨三個平台。

 

第四部分、Xamarin家族


Xamarin發展到了Xamarin.Forms這個階段,

你一定會有個疑問,那麼之前的Xamarin有因此而不再被人使用嗎?

答案是不,而且反而更多人用的是之前的Xamarin,

Xamarin.Forms的確非常的優秀,只需一套語言,便能同時運作於三個平台上,

但是也正如我先前所說,各大平台的UI控制項各自有特色,

能共用的項目相對非常非常的少,

花俏、複雜的畫面、各平台獨特的UI控制項,

為了「跨平台」這件事情的實現,只好被捨棄(或者需要自己慢慢刻出來),

但程式終究是設計給「人」使用的,

一套程式就能跑在三平台或許替工程師省下不少開發上的時間,

但是缺乏了許多特色與獨特UI美感的程式,使用者可是不會買單的,

所以我們可憐的工程師(幫QQ)雖然有這一個只要開發一次就好,如此方便的語言,

但為了使用者,我們只好退一步,回到之前的Xamarin,

而在Android上運作的Xamarin,我們稱之為Xamarin.Android,

在IOS上運作的Xamarin,我們稱之為Xamarin.IOS,

我們可以用一樣的語言(C#)作開發,

但是UI設計這部分,只能各自針對各平台下手,產生出各平台獨特的UI。

詳細我們可以比較下表:

 

 

Xamarin.Android

Xamarin.IOS

Xamarin.Forms

語言

使用共同語言C#

特色

針對Android UI與原生功能開發

針對IOS UI與原生功能開發

整合三個平台的UI,
做一次UI即可在三種不同的平台上運行

優點

能夠保有並使用Android上獨具特色的UI控制項

能夠保有並使用IOS上獨具特色的UI控制項

只要拉一次UI,
就可以在三種不同的平台上運行

缺點

製作出的程式不能在IOS上運作

製作出的程式不能在Android上運作

雖然只需拉一次UI即可同時在三個平台上運作,但限制相對十分的多,花竅、複雜、各平台特有的UI控制項皆不能使用
(或者需要開發者自己慢慢刻出來)

 

第五部份、現在的Xamarin?


正如前面所說,由於Xamarin.Forms先天的限制太多,

讓Xamarin.Android、Xamarin.IOS能保有充分的發揮空間,

在現在的市場中,各自有各自的地位,

各平台的原生語言,能完美發揮各平台的特色

Xamarin.Android、Xamarin.IOS,不但能跨平台開發,又能保有各自平台獨具特色的UI控制項

Xamarin.Forms,整合了跨平台,也整合了UI,真正實現了一套語言能同時運作各平台的特性

不同的語言具有不一樣的長處,帶給工程師更多的選擇,也產生更多開發上的便利

 

參考資料


  1. Xamarin官方網站:https://www.xamarin.com/platform
  2. Slides:http://www.slideshare.net/Xamarin/introduction-to-xamarinforms