在配置好開發環境之后,接下來就開始了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以及跨平台工具應該注意的事項和一些簡短的介紹。
歡迎大家拍磚。。。