用VS2015中Xamarin開發跨平臺APP的感受
由於新專案需要開發APP,團隊內部都是C#開發工程師,還需要考慮安卓和iOS兩個版本,被安排學習VS2015裡面的Xamarin.Froms開發。想起微軟剛收購Xamarin後,大肆宣傳Xamarin跨平臺開發的牛逼,自己本行又是C#,也就一頭扎進去了。畢竟,去年剛釋出時,Xamarin還要收費,價格對於個人開發者來說還不便宜。挺坑的,想來沒幾個人用過,或者會用收費的IDE吧,當時還因此自學原生安卓去了,好在時至今日免費了。學習一兩個月Xamarin時間後,談談對微軟這個跨平臺開發一點個人看法吧。
安裝:
Xamarin被微軟收購後,整合到了VS2015中,不過也不夠徹底,不會像WCF、 Silverlight一樣直接安裝完VS後就存在於VS當中。Xamarin需要另外安裝,當然,微軟的VS裡面會有相應提示,以便引導你安裝完畢。但你會遇到一些問題,比如谷歌伺服器無法訪問導致下載不了SDK,這個可以通過國內映象地址來解決,我記得第一次安裝時,還是花了15元翻出去下載後安裝的,後面提示30天到期要收費,爺表示不能忍,果斷卸了!另外,如果你不懂安卓,會很納悶,畢竟VS一貫高度整合的安裝體驗,只需要你點選下一步就一切OK,等待完成安裝了,這種體驗在這裡蕩然無存,你得配置java環境變數,sdk,ndk路徑等等,初次使用很是糾結。VS盡力了,畢竟不是自己的玩意兒,不配置這些,它怎麼間接呼叫安卓需要的java環境來間接編譯程式碼呢。所以初次配置安裝環境確實沒VS來的那麼好用了。
安裝佔用情況:
安裝完之後,有些剛開始接觸的人把sdk全部下下來,加上VS2015自身佔用的空間,C盤壓力山大。而且,你會發現開啟VS2015也比以前慢了不少,不及VS2012的急速體驗。
說說開發中的一些情況吧:
(1)xamarin斷點除錯有時進不去不好調:非常神奇,雖然概率也不高,不過非常影響你的開發心態,後面也就淡定了。
(2)xaml介面程式碼看不到介面:這裡是指Xamarin.Froms,用Xamarin單獨開發安卓或者iOS,即Xamarin.Android和Xamarin.iOS是可以看到設計介面的,不過載入速度跟檢視美觀度比AS和Xcode是要差一些。單獨的開發大致相當於換了個語法,其它跟原生差不多(先保留,iOS還未試過)。因為考慮到跨平臺原因,Xamarin.Froms是用的xaml代替安卓xml繪製介面,有點像手機版的wpf。沒有檢視引擎,所見即所得的開發就不行了,你得執行起來才看得到效果,當然,熟練之後,直接寫介面程式碼即可知道實現效果,跟你用熟了html不需要看檢視一樣。對於初學者,這點很是蛋疼。(更新,最新版的Xamarin.Froms可以看到介面了,所見即所得)
(3)有些控制元件得自己重寫:對,常規的如label、editbox都有,但checkbox這種比較常用的還需要重寫。當然輸入框控制元件為了在iOS和安卓保持統一樣式,雖用不著重寫實現邏輯,但需要重寫下樣式,畢竟兩個系統對輸入框的預設樣式不同。
(4)寫頁面跳轉麻煩:Xamarin.Froms的頁面跳轉是指定當前顯示頁為哪個頁面,這種方式沒有頁面堆疊,所以你按返回鍵就直接退出程式了。要實現像安卓原生那樣,需要你自己寫程式碼實現頁面棧。當然,基於其衍生的框架或許有此功能。目前涉及未深,有知情者煩請告知一二。
(5)壓縮包無形中變大了:會的,他需要多安裝兩個東西,mono這些以便底層環境的轉換,壓縮包會大幾M。
(6)執行效率慢:很正常,畢竟要多個轉換步驟,編譯器編譯會慢一點,因為在安裝app之前還需要安裝mono。實測我AS編譯只有十幾秒,xamarin.from開發的話一般需要1分鐘左右,汗。。。 真機執行情況的話,安卓比原生慢一點點,iOS據微軟說跟原生速度是一樣的,這個涉及到底層程式碼執行機制問題。
(7)支援庫:無論是基於其的mvvmlight還是mvvmcross開發,跟原生差別比較大,最主要的是支援庫少,你不可能全部自己寫吧。當然,對牛逼的人來說這是樂趣。
(8)錯誤提示:有事會出現編譯失敗,但控制檯輸出卻顯示錯誤0,然後過一會兒編譯又成功了的情況發生,或者重啟電腦,又可以編譯通過了。還出現這種情況,程式碼編輯區中部分程式碼下面顯示紅線報錯,編譯還是能通過的,希望你對自己程式碼自信點。自己也遇到過奇怪的報錯,提示你修改什麼配置,但這個配置只有在AS裡面才能修改,VS根本這個選項都沒有。
(9)新特性難以及時支援:當安卓或者ios得到新的大更新時,Xamarin不一定得到及時更新,官方說的會自動同步更新,但實際。。。更新了不敢用啊,親測更新了最新版,編譯老是出問題,最後卸了裝回了之前版本,原因可能還是在於各個IDE之間的不協調。
(10)資料:Xamarin的支援庫,資料都不較少,百度查詢的解決辦法少之又少,有些還是國外開發者的英文論壇,解決問題的難度比原生大了不少,有可能你是國內第一個遇到此問題的人。書籍?沒幾本,基本都是英文的,國內還沒翻譯版本出現。
當然,Xamarin也有優勢的,比如跨平臺,能夠做到業務邏輯編寫一次,各個平臺都能呼叫。另外就是對於長期進行C#開發的人來說,語言上比較習慣。但對於直接呼叫服務端介面返回json結果的方式,實際沒什麼用,這部分邏輯都交給服務端了,還需要你將這部分邏輯程式碼,包含進各個不同系統的手機內部使用幹啥。
總結:C#開發人員想靠Xamarin切入到移動APP開發有點尷尬,我這麼說主要是基於初學者來說的,熟手無所謂了。有些高階特性難以實現,即使你實現的話,還是要學習原生安卓或者iOS開發,瞭解裡面的機制。簡單的APP可以用Xamarin,跨平臺嘛,原先的C#人員也便於維護,不用再招人。初學者不考慮團隊上的因素,建議學新的語言,你學安卓的話,開始上手花的時間多點,而用Xamarin是開始花的時間少,後面你花的時間可就多了去了。
上手不久,歡迎留言提供你的看法!後續博文,我也將繼續更新Xmarin學習中的一點個人體會。