感謝IT之家網(wǎng)友 DotNet碼農(nóng) 的投稿
1、Xamarin的優(yōu)勢(shì)
對(duì)于一家希望擁有移動(dòng)終端用戶的公司來(lái)說(shuō),不得不同時(shí)考慮兩個(gè)(或三個(gè),雖然比較少就是了)平臺(tái)的移動(dòng)應(yīng)用程序開(kāi)發(fā)。然而令這些公司頭疼的是,安卓開(kāi)發(fā)多采用Java、iOS開(kāi)發(fā)多采用Swift(或OC)、Win10 UWP開(kāi)發(fā)多采用C#,這意味著這些公司不得不雇傭好幾批工程師,或者讓同一批工程師同時(shí)維護(hù)多個(gè)互不兼容的項(xiàng)目(當(dāng)然,這些人的工資就得高一點(diǎn))。
解決這一問(wèn)題目前唯一成熟的方案是Xamarin,這是微軟旗下的、致力于使.NET框架兼容其它移動(dòng)端平臺(tái)上的項(xiàng)目。我在以前的文章里提到過(guò),這個(gè)所謂“框架”的東西,能抹平不同系統(tǒng)平臺(tái)上API的差異,這意味著開(kāi)發(fā)人員將能通過(guò)Xamarin在三個(gè)平臺(tái)之間共享核心代碼。
舉個(gè)例子:假定某論壇需要多平臺(tái)移動(dòng)客戶端,那么該平臺(tái)需要維護(hù)三個(gè)獨(dú)立的項(xiàng)目,每一個(gè)項(xiàng)目都有一套獨(dú)立的業(yè)務(wù)代碼;每次論壇API升級(jí),三個(gè)項(xiàng)目必須分別被更新,否則App就會(huì)不可用。假如這個(gè)論壇采用Xamarin開(kāi)發(fā)它的客戶端,工程師們就能在三個(gè)平臺(tái)之間共享超過(guò)95%的業(yè)務(wù)代碼;無(wú)論是開(kāi)發(fā)時(shí),還是API更新時(shí),只需要將這個(gè)共享的業(yè)務(wù)代碼維護(hù)一次,就能同時(shí)應(yīng)用在三個(gè)項(xiàng)目上。
2、Xamarin開(kāi)發(fā)環(huán)境的搭建(Android)
搭建這樣一個(gè)采用C#的開(kāi)發(fā)環(huán)境并不復(fù)雜:它依然可以集成至Visual Studio。下面以Visual Studio 2017作為例子,來(lái)講解該如何安裝Xamarin。
找到一個(gè)名為VSInstaller的應(yīng)用程序(不出意外的話,已經(jīng)安裝過(guò)VS2017的朋友可以在開(kāi)始菜單里找到它),啟動(dòng)它。你已經(jīng)安裝的VS產(chǎn)品會(huì)被呈現(xiàn)在第一位。單擊產(chǎn)品標(biāo)識(shí)下面的“修改”按鈕,修改程序功能。勾上這一項(xiàng):
并在右邊的詳細(xì)目錄里,去掉Android SDK和Android NDK(因?yàn)樗鼈冊(cè)谥袊?guó)大陸是無(wú)法訪問(wèn)的,這會(huì)導(dǎo)致VS功能修改失?。?/p>
單擊修改按鈕,讓它完成修改過(guò)程。
由于剛剛?cè)サ袅薃ndroid SDK的安裝,我們的Xamarin雖然可以編寫代碼,但是卻不能編譯和調(diào)試?,F(xiàn)在我們來(lái)手動(dòng)獲取Android SDK。
登錄Android開(kāi)發(fā)工具中國(guó)鏡像網(wǎng)站http://www.androiddevtools.cn/,頁(yè)面下方會(huì)有鏡像站的安卓開(kāi)發(fā)工具下載地址:
下載那個(gè)zip版本的Windows平臺(tái)下的Android SDK,校驗(yàn)完畢后解壓至自己平時(shí)存放開(kāi)發(fā)工具集的目錄。下面會(huì)有這樣一些文件(可能會(huì)少幾個(gè)目錄,但是在整體配置完畢之后就會(huì)有的):
啟動(dòng)SDK Manager,我們來(lái)配置鏡像服務(wù)器。由于Android SDK的服務(wù)器在中國(guó)大陸無(wú)法訪問(wèn),所以中國(guó)很多企業(yè)、研究機(jī)構(gòu)和教育機(jī)構(gòu)都建立了Android SDK的鏡像站。下面是目前可用的鏡像站列表(來(lái)自Android開(kāi)發(fā)工具中國(guó)鏡像網(wǎng)站):【更新國(guó)內(nèi)可訪問(wèn)的谷歌安卓SDK下載:點(diǎn)此鏈接】
我們?cè)赟DK Manager的菜單欄,選擇Tools->Options,將任一有效地址填入Proxy Settings里,并勾上Others下的第一項(xiàng),如圖:
填好之后,Close關(guān)掉這個(gè)窗口,在主界面菜單欄選擇Packages->Reload,這樣就能獲得工具包列表,并且可以正確執(zhí)行安裝了。安卓各平臺(tái)對(duì)應(yīng)的SDK Platform根據(jù)需要安裝,但是這幾項(xiàng)是必須安裝的:
等待安裝完成,SDK的配置就完畢了。啟動(dòng)Visual Studio,在菜單欄選擇工具->選項(xiàng),在左側(cè)找到Xamarin->Android設(shè)置,將Android SDK位置設(shè)置為你存放SDK的路徑,直至路徑左側(cè)顯示綠色對(duì)勾:
這一步完成后,Visual Studio應(yīng)該就能正確編譯Android應(yīng)用了(如果您擁有合適版本的安卓手機(jī),并已經(jīng)打開(kāi)了USB調(diào)試,那么請(qǐng)直接跳到4,不用看下一節(jié))。但是在測(cè)試環(huán)境被搭建好之前,我們還無(wú)法對(duì)其的工作進(jìn)行測(cè)試。
3、測(cè)試用虛擬機(jī)推薦
本節(jié)針對(duì)沒(méi)有可用的安卓測(cè)試機(jī)的讀者。
虛擬機(jī)是測(cè)試的關(guān)鍵。目前常用的開(kāi)發(fā)用虛擬機(jī)有:谷歌安卓模擬器(官方),VS Emulator for Android(微軟)。但是對(duì)于一般的計(jì)算機(jī),我并不推薦上述兩種:谷歌安卓模擬器運(yùn)行效率向當(dāng)?shù)?,而微軟的安卓虛擬機(jī)復(fù)雜的網(wǎng)絡(luò)共享方式不僅可能不會(huì)正常工作,甚至還會(huì)使主機(jī)產(chǎn)生麻煩的網(wǎng)絡(luò)問(wèn)題。這里我推薦一種基于Virtual Box的安卓虛擬機(jī):Genymotion。Genymotion的個(gè)人版是免費(fèi)的,而且運(yùn)行起來(lái)相當(dāng)高效,很適合作為測(cè)試用虛擬機(jī)。安裝方式很傻瓜,我在此不作贅述,但是需要注意的是,Genymotion攜帶的Virtual Box版本過(guò)低不能正確運(yùn)行在Windows10創(chuàng)意者更新上,所以推薦安裝不攜帶Virtual Box的版本,然后手動(dòng)安裝Virtual Box的最新版本。
安裝完畢之后,創(chuàng)建一個(gè)虛擬機(jī),確保它能正常運(yùn)行,這樣你就擁有了一個(gè)不算專業(yè),但可用的測(cè)試環(huán)境。
4、Hello, Android!
上述環(huán)境搭建完畢,是時(shí)候來(lái)嘗試編寫我們的第一個(gè)采用C#的Android程序了。啟動(dòng)Visual Studio,新建一個(gè)項(xiàng)目,看,Android的所有項(xiàng)目類型都可用了:
不同的是,它們的語(yǔ)言類型是C#。甚至,你還可以采用Xamarin.Forms技術(shù)同時(shí)編寫三個(gè)平臺(tái)的應(yīng)用:
不過(guò)這里,我們還是新建一個(gè)普通的空白Android應(yīng)用程序,耐心等待解決方案被創(chuàng)建完畢,觀察解決方案管理器,你會(huì)發(fā)現(xiàn)某些地方,這個(gè)項(xiàng)目的結(jié)構(gòu)和一個(gè)普通的Android應(yīng)用很相似:
不同的是,代碼采用了C#。我們修改那個(gè)Main.axml,讓它看起來(lái)是這個(gè)樣子:
這和普通的Android UI編寫方式大同小異。我們雙擊打開(kāi)MainActivity.cs,眼前是熟悉的C#代碼:
需要指出的是,雖然這個(gè)例子我們體會(huì)不到跨平臺(tái)的便利性,但是上面的using指令除了可以引用安卓特有的、位于Android空間下的名稱空間以外,標(biāo)準(zhǔn)的.NET框架所包含的System名稱空間也幾乎全是可用的,這造就了Xamarin最大的優(yōu)勢(shì),即可以跨平臺(tái)共享代碼:
我們編寫OnCreate方法:
并且編寫一個(gè)事件處理程序(技巧:λ表達(dá)式):
這樣,我們的第一個(gè)用C#編寫的Android應(yīng)用就編寫好了。啟動(dòng)虛擬機(jī),或者把測(cè)試用手機(jī)連接至計(jì)算機(jī)(記得打開(kāi)USB調(diào)試,虛擬機(jī)就不用了),等待正確連接之后,打開(kāi)“運(yùn)行”按鈕右側(cè)的下拉菜單選擇你的設(shè)備,理論上,正常連接后它會(huì)顯示你設(shè)備的名字:
執(zhí)行我們的應(yīng)用。編譯過(guò)程和部署過(guò)程可能需要花費(fèi)一定的時(shí)間,依各人計(jì)算機(jī)性能決定:
你可以像調(diào)試一個(gè)普通的C#程序一樣給它加斷點(diǎn)、監(jiān)視和使用其它強(qiáng)大的調(diào)試工具:
如果你能做到上述幾點(diǎn),那么恭喜你,你的采用C#的安卓開(kāi)發(fā)環(huán)境搭建完成了。你可以嘗試在代碼文件里編寫你熟悉的C#語(yǔ)言,即使你完全沒(méi)接觸過(guò)Android開(kāi)發(fā),你也能輕易做出一個(gè)頗具規(guī)模的Android應(yīng)用程序。iOS可以采用相同的方式開(kāi)發(fā),但是你必須擁有一臺(tái)Mac作為渲染和調(diào)試服務(wù)器,這也許是蘋果公司的策略導(dǎo)致的。
如果你需要在Android和iOS平臺(tái)上(也許會(huì)包括UWP平臺(tái))同時(shí)維護(hù)移動(dòng)應(yīng)用,Xamarin絕對(duì)是個(gè)省時(shí)省力的選擇;即使你只需要開(kāi)發(fā)某一個(gè)特定平臺(tái)的應(yīng)用,Xamarin也不失為一個(gè)優(yōu)秀的平臺(tái)。
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。