在配置好開發環境之後,接下來就開始了MonoForAndroid的學習了,在進入開發之前,先對一些基本的知識做一個簡單的介紹。寫的可能比較亂也可能比較囉嗦,大家見諒。
在過去的幾年中,智能手機的使用以驚人的速度增長。與案頭電腦不同的是,智能手機的增長和普及也帶來了競爭,目前還沒有任何一家或者平台統治了行動裝置市場;行動裝置可以使用Symbian、Research in Motion、windows mobile、android以及其他平台。此外,裝置也可以運行相同的作業系統,並以不同的外觀樣式呈現給使用者。市場上所存在的這種裂痕是開發人員面臨著一個非常大的問題:他們如何使用已有的某種開發架構或工具,以及如何使用關於某種裝置的相關知識?
本章將會介紹.NET/C#開發人員如何在擁有最高平台知名度的只能手機(Android)上完成開發工作。
1.1 產品比較
本小節將介紹.NET Framework、mono以及mono for android。這些產品允許數量龐大的Android開發人員針對Android行動裝置家族進行開發。
.NET Framework
該架構基於一種用來執行針對架構所編寫的軟體的虛擬機器,這種虛擬機器環境稱為CLR,主要負責安全、記憶體管理、程式運行以及異常處理。
在.NET Framework中編寫的應用程式的原始碼最初被編譯為一種名為MSIL的中繼語言,該初始編譯由特定的命令列編譯器來執行,而當執行應用程式是通常會執行二次編譯,二次編譯將會擷取中繼語言並將其編譯為可在作業系統中啟動並執行可執行代碼,二次編譯被稱為JIT編譯。
該架構是獨立於語言的,並可以使用多種語言。如VB、F#、C++、C#。
該架構套件含了為不同語言提供一致功能的一系列庫,這些庫稱為基底類別庫。
但是該架構有個缺點:非Microsoft平台無法使用該架構。
所有這一切的意義在於Microsoft為.NET Framework建立了一個基於標準的環境,讓許多低層級的開發人員可以融入到.NET Framework。
Mono
Mono是一個在非Windows作業系統中提供C#編譯器和CLR的開源項目。可在Mac、Linux、BSD以及其他動作系統中運行。通過C#編譯器,還可在mono中運行其他語言,其中包括F#、Java、Scala和Basic等。
Mono的創始人是Miguel Icaza 。至於這個人的介紹我就不說了,大家可以百度一下或者Google一下都可以的。
雖然期望mono的功能可以儘可能多的於.NET Framework的功能相匹配,但這是不可能的,因為Microsoft擁有更多的資源,並且在這些功能的開發上具有先起步的優勢,Xamarin最多隻能實現.NET Framework中大多數的API,但是稍滯後一些。
.NET/Mono和Android存在的其中一個缺點是.NET/Mono開發人員不能在Android平台上利用他們已有的.NET/Mono/C#相關知識。.NET/Mono開發人員不能夠針對Android進行開發,因為他們是兩個完全獨立的實體。基於MonoTouch(允許C#開發人員針對Apple的iPhone進行開發)的經驗,於是就有了Mono for Android 。。。
Mono For Android
Mono for Android所公開的API是.NET Framework 4 的核心功能、Silverlight API以及本機Java VM 的組合。Mono for Android的本機API於.NET以及C#開發人員所熟悉的API之間提供了一個橋樑(互操作)層。
Mono for Android由一組針對移動平台進行最佳化的程式集、命名空間以及類組成。
命名空間和類:
Mono.Android.dll |
該程式集提供了於Android API的C#綁定,其中包括了支援Android.* 命名空間的命名空間 |
System.dll |
該程式集為Mono for Android 提供了許多.NET Framework功能 |
Momo.data.Sqlite.dll |
該程式集是針對本機SQLite資料庫的ADO.NET提供者 |
Mono.Data.Tds.dll |
該程式集提供了對TDS協議的支援,而該協議主要用於串連Sql Server |
OpenTK.dll |
該程式集提供了對OpenGL的支援 |
System.Json.dll |
該程式集提供了對使用JSON的支援 |
System.ServiceModel.dll |
該程式集提供了對WCF的支援 |
System.Xml.dll |
該程式集提供了對XML的支援 |
System.Xml.Linq.dll |
該程式集提供了從 LINQ 到XML 的支援 |
下面是mono for android 提供的一些非常重要的命名空間 |
|
Android |
Android.* 命名空間提供了對資源、類以及應用程式許可權的支援 |
Android.Bluetooth |
該命名空間提供了對藍芽的支援 |
Android.Database |
該命名空間提供了對裝置上的Sqlite資料庫的支援 |
Android.Graphics |
該命名空間提供了對圖形顯示的支援 |
Android.Hardware |
該命名空間提供了對Android裝置上硬體的支援 |
Android.Location |
該命名空間提供了對位置的必要支援 |
Android.Net |
該命名空間提供了對網路的支援,其中包括對VoIP(Voice over IP)和Wifi 的支援 |
這些命名空間只是mono for android 中可用命名空間中很小的一部分,他們的功能不言自明。這些命名空間是特定於Android的,使用它們所編寫的代碼只能在基於Android的裝置上運行。
1.2 移動開發
當要構建應用程式時,需要牢記幾個要點:
(1) Android模擬器適合於進行初始測試,並不是對於所有測試都是準確的,應該在不同版本的Android裝置中完成最終測試。
(2).NET 的可執行檔都非常小,因為這些檔案可以使用架構的共用副本。Mono for Android可以按照兩種不同的方法來部署應用程式,其中最常用的方法是將應用程式和mono for android 綁定到一起,第二種方法是讓應用程式共用Mono架構
(3)成為裝置上的一個好公民是非常重要的。
除了為Android構建應用程式所涉及的技術問題外,開發人員還需要瞭解一些設計問題:
(1)不要先為一個案頭環境設計一個應用程式,然後再將其縮減到android或任何行動裝置中。
(2)Android模擬器是一個非常好的工具,但不要將測試限制在此工具中。
(3)當在行動裝置上進行測試時,雖然Wifi也是一種移動網路,但通常辦公室或家中的Wifi可以提供比行動電信業者的網路更高的品質。
1.3 Android
Android的發展曆史我也不說了,有興趣可以百度一下或Google一下
在行動裝置上運行應用程式是,開發人員必須考慮的幾個問題:
(1) 存在非常多的外觀大小、螢幕大小以及裝置,所以開發人員必須要考慮裝置的差異。
(2)開發人員必須考慮Android作業系統的不同版本。
(3)開發人員必須抱著實事求是的態度對待Android market 所提供的關於應用程式的銷售數字。
1.4 跨平台替代方案
除了mono for android外,還有其他的跨平台的移動開發工具,如PhoneGap、Appcelerator Titanium、RhoMobile Rhodes
當選擇跨平台工具時,要考慮許多不同的情況。某些情況下,選擇某些工具可能會提供過於簡單的解決方案,並且使維護/功能變得非常難以處理甚至不可能處理。。。因此選擇一款合適的工具是很重要的。
本章就介紹到這裡,回顧下:
對.NET Framework 和 Mono進行了一下簡單的比較
移動開發、Android以及跨平台工具應該注意的事項和一些簡短的介紹。
歡迎大家拍磚。。。