1. Xamarin开发入门
移動應用開發主要在兩個產品之間共享:蘋果的iOS和谷歌的Android。iOS的本機開發是使用編程語言Objective-C或Swift、Cocoa和Cocoa Touch框架完成的。Cocoa是蘋果API的名稱。在為Android開發時,可以使用谷歌的Android SDK,而Java是主要編程語言。
可以使用C#和XAML,而不是使用不同的編程語言重寫代碼。Xamarin提供跨平臺開發,但仍然可以使用本機API。
由于Xamarin被微軟收購,并且Visual Studio中的Xamarin工具集成越來越好,因此許多使用跨平臺技術的應用程序可以提高生產率。
本章介紹如何開始創建Xamarin應用程序。使用從其他章節學到的有關C#、.NET Core和XAML的基礎,在閱讀本章后,就可以使用Xamarin開發開始應用程序了。其他專門討論Xamarin的書中還有很多這方面的內容,這是一個好的開始。
注意:
要創建和編譯本章中的示例,需要在Windows 系統上安裝Mobile Development with .NET 工作負載。另一個選項是,可以使用Visual Studio for Mac。擁有Android手機有助于運行Android應用程序。要創建和編譯iOS示例,需要使用Mac進行編譯,而iPhone也很有用。
1. 用Android架構Xamarin
為Android手機創建Xamarin應用程序時,知道幕后發生了什么是很不錯的。下圖給出了一個架構概括。Android在Linux內核上運行。在Google中可以看到,Android SDK在Android運行庫(ART)之上運行。該圖的左側顯示了.NET部分——使用.NET Mono運行庫的.NET API。Mono運行庫和ART在應用程序進程中并行運行。Mono Callable Wrapper(MCW)用于從.NE中調用Android SDK。反過來也是可能的:為了從Android進入.NET,可使用Android Callable Wrapper(ACW)。用戶過去可能使用過.NET與COM(來自Microsofte的組件對象模型)。在這里,該體系結構與Runtime Callable Wrapper(RCW)和COM Callable Wrapper(CCW)非得相似。為了便于從.NET進入Android SDK,Xamarin創建了Android Binding。
如果想從.NET中調用Android SDK,則可以創建MCW。
Xamarin.Android使Android中的Java API可用于.NET,而且它非常龐大。這些API可以在https://developer.xamarin.com/api/root/MonoAndroid-lib/上找到。這里只提及幾個重要的名稱空間:Android.App名稱空間帶有Activity類和用于長時間運行的后臺操作的Service類,以及帶UI元素的Android.Widget名稱空間。
Xamarin網站上的文檔遺漏了很多可以直接在https://developer.android.com/reference/packages.html上閱讀的信息。在映射類型時,來自https://developer.android.com的信息比較適用。
2. 用iOS架構Xamarin
iOS上Xamarin應用程序的體系結構是不同的。由于iOS上的安全限制,不允許在設備上執行動態生成的代碼。這就是為什么Xamarin使用提前(AOT)編譯器將從C#編譯器創建的IL代碼編譯為本機代碼的原因。這提供了很好的運行性能和更好的啟動時間,但它也有一些限制。C#將泛型編譯為泛型IL類型。使用泛型類型和即時(JIT)編譯器,當IL代碼在運行期間被編譯時,會解析泛型。使用ADO編譯器,IL代碼需要在部署到設備上之前進行編譯。所以泛型不能用于某些場景。例如,不能在派生自NSObject的類中創建泛型方法。泛型也不能用于P/Invoke。對于Xamarin.iOS,P/Invoke用于使用C#定義方法,但它使用Objective-C中的實現。而且,反射是有限的。不能用反射發射代碼,動態生成的代碼是不允許的。由于IL代碼已經預編譯,Mono iOS Rntime中的更多功能被禁用,例如元數據驗證程序和JIT引擎。
下圖給出了Xamarin的iOS體系結構的概括圖。iOS使用類似于Unix的內核,Objective-C運行庫和iOS? API在其頂部。.NET API綁定到iOS Api,以提供相同的功能,并使用AOT編譯器和刪減版的Mono運行庫。
在https://developer.xamarin.com/api/root/ios-unified/上可以找到Xamarin.iOS的文檔。Xamarin for iOS提供了許多SDK。用戶界面的主要部分是UIKit名稱空間。Apple的信息可以在https://developer.apple.com/documentation/uikit中找到。
幸運的是,可以使用C#和XAML為這些平臺開發。Xamarin提供跨平臺的開發,但它仍然使用平臺的所有功能。
注意:
為什么用戶界面的iOS類具有UI前綴。原因是Objective-C(用于實現本機iOS應用程序的編程語言)不支持名稱空間。為了避免與其他類的沖突,用戶界面的類具有UI前綴,而來自其他區域的類具有其他前綴。Xamarin.iOS.Contacts名稱空間中的類具有前綴CN,例如CNContact。
注意:
Xamarin.iOS(經典)與Xamarin.iOS不同,它也編輯為"統一"。Xamarin.iOS(經典)僅適用于iPhone,而更新版本的Xamarin.iOS為iPhone、iPad和Mac使用統一的API。經典的API也僅限于32位,不再能在App Store中使用。
3. Xamarin.Forms
有了Xamarin,可以使用Xamarin.Android創建Android應用程序,使用Xamarin.iOS創建iOS應用程序,或者使用Xamarin.Forms創建適用于Android、iOS、Windows和更多平臺的應用程序。
有了Xamarin.Android,就可以使用完整的API和Android SDK的所有控件。借助Xamarin.iOS,可以看到可從C#中訪問的所有iOS SDK。使用Xamarin.Android或Xamarin.iOS,可以創建單獨的用戶界面并使用平臺特定的代碼,但可以共享業務邏輯和服務。
使用Xamain.Forms,可以共享用戶界面代碼,還可以使用XAML代碼創建用戶界面。但是,與使用矢量圖形繪制元素的UWP相反,Xamarin.Forms使用每個平臺的本機控件呈現用戶界面。
使用本機控件具有很大的優勢,因為可以獲得每個平臺本機控件的外觀和性能。不過,本機控件也有一個缺點。使用Xamarin.Forms,只能獲得可映射到每個平臺的控件,得不到僅在Android或iOS上可用的控件。可以實現一個自定義的特定于平臺的渲染器,以使用不能直接從Xamarin.Forms上訪問的、平臺特定的控件或特征。
注意:
還記得Windows 窗體嗎?Windows 窗體是本機Windows控件的一個包裝器。也許選擇Xamarin.Forms這個名字是因為它也是本機控件的包裝器。Xamarin.Forms包裝了iOS、Android和Windows上的本機控件。
?
總結
以上是生活随笔為你收集整理的1. Xamarin开发入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 放假的第二天
- 下一篇: loss低但精确度低_低光照图像增强网络