Share via


第 1 部分 – 了解 Xamarin 行動平臺

Xamarin 平臺包含許多元素,可讓您開發 iOS 和 Android 的應用程式:

  • C# 語言 – 可讓您使用熟悉的語法和複雜的功能,例如泛型、LINQ 和平行工作連結庫。
  • Mono .NET Framework – 提供 Microsoft .NET Framework 中廣泛功能的跨平台實作。
  • 編譯程式 – 視平臺而定,產生原生應用程式(例如 iOS)或整合式 .NET 應用程式和運行時間(例如 Android)。 編譯程式也會針對行動部署執行許多優化,例如連結未使用的程序代碼。
  • IDE 工具 – Mac 和 Windows 上的 Visual Studio 可讓您建立、建置及部署 Xamarin 專案。

此外,因為基礎語言是 .NET Framework 的 C#,因此專案可以結構化,以共用也可以部署到 Windows 電話 的程式代碼。

深入探討

雖然 Xamarin 可讓您在 C# 中撰寫應用程式,並在多個平臺上共用相同的程式代碼,但每個系統上的實際實作都不同。

編譯

C# 來源會以不同方式在每個平台上進入原生應用程式:

  • iOS – C# 已預先編譯成 ARM 元件語言。 隨附 .NET Framework,在鏈接期間會移除未使用的類別,以減少應用程式大小。 Apple 不允許在 iOS 上產生執行時間程式代碼,因此無法使用某些語言功能(請參閱 Xamarin.iOS 限制 )。
  • Android – C# 會編譯為 IL,並使用 MonoVM + JIT'ing 封裝。 在連結期間,架構中未使用的類別會遭到移除。 應用程式會與 Java/ART(Android 執行時間)並排執行,並透過 JNI 與原生類型互動(請參閱 Xamarin.Android 限制 )。
  • Windows – C# 會編譯為 IL,並由內建運行時間執行,而且不需要 Xamarin 工具。 遵循 Xamarin 指引設計 Windows 應用程式,可讓您更輕鬆地在 iOS 和 Android 上重複使用程式碼。 通用 Windows 平台 也有 .NET Native 選項,其行為類似於 Xamarin.iOS 的 AOT 編譯。

Xamarin.iOSXamarin.Android 的連結器檔提供編譯程式這個部分的詳細資訊。

應該避免使用 System.Reflection.Emit 動態產生程式代碼的運行時間 『compilation』。

Apple 的核心可防止在 iOS 裝置上產生動態程式代碼,因此在 Xamarin.iOS 中發出程式代碼將無法運作。 同樣地,動態語言執行平臺功能無法與 Xamarin 工具搭配使用。

某些反映功能可以運作(例如 MonoTouch.Dialog 會將其用於 反思 ION API),但不會產生程式代碼。

平臺 SDK 存取

Xamarin 可透過熟悉的 C# 語法,輕鬆地存取平臺特定 SDK 所提供的功能:

  • iOS – Xamarin.iOS 會將 Apple 的 CocoaTouch SDK 架構公開為您可以從 C# 參考的命名空間。 例如,包含所有使用者介面控件的UIKit架構可以包含在簡單 using UIKit; 語句中。
  • Android – Xamarin.Android 會將 Google 的 Android SDK 公開為命名空間,因此您可以使用 using 語句來參考所支援 SDK 的任何部分,例如 using Android.Views; 存取使用者介面控件。
  • Windows – Windows 應用程式是使用 Windows 上的 Visual Studio 所建置。 項目類型包括 Windows Forms、WPF、WinRT 和 通用 Windows 平台 (UWP)。

適用於開發人員的無縫整合

Xamarin 的美在於,儘管 Xamarin.iOS 和 Xamarin.Android 在幕後有差異,但 Xamarin.iOS 和 Xamarin.Android(加上 Microsoft 的 Windows SDK)提供順暢的撰寫 C# 程式代碼體驗,可在這三個平臺上重複使用。

商業規則、資料庫使用方式、網路存取和其他一般函式可以撰寫一次,並在每個平臺上重複使用,為平臺特定使用者介面提供基礎,其外觀和執行為原生應用程式。

集成開發環境 (IDE) 可用性

您可以在 Mac 或 Windows 上的 Visual Studio 中完成 Xamarin 開發。 您選擇的 IDE 將會由您想要鎖定的平台決定。

因為 Windows 應用程式只能在 Windows 上開發,若要針對 iOS、Android 和 Windows 建置,則需要 Visual Studio for Windows。 不過,您可以在 Windows 和 Mac 計算機之間共用項目和檔案,因此 iOS 和 Android 應用程式可以建置在 Mac 上,而共用程式代碼稍後可以新增至 Windows 專案。

每個平台的開發需求會在需求指南中更詳細地討論。

iOS

開發 iOS 應用程式需要執行 macOS 的 Mac 電腦。 您也可以使用 Visual Studio 在 Visual Studio 中使用 Xamarin 來撰寫和部署 iOS 應用程式。 不過,仍需要Mac才能進行建置和授權。

必須安裝 Apple 的 Xcode IDE,以提供編譯程式和模擬器進行測試。 您可以免費在自己的裝置上進行測試,但若要建置應用程式以供散發(例如 App Store),您必須加入 Apple 的開發人員計劃(每年 99 美元)。 每次提交或更新應用程式時,都必須由Apple檢閱並核准,然後客戶才能下載。

程序代碼是使用 Visual Studio IDE 撰寫,而螢幕版面配置可以用程式設計方式建置,或在 Mac 上使用 Xcode 進行編輯。

如需有關設定的詳細指示, 請參閱 Xamarin.iOS 安裝指南

Android

Android 應用程式開發需要安裝 Java 和 Android SDK。 SDK 提供建置、部署和測試所需的編譯程式、模擬器和其他工具。 Java、Google 的 Android SDK 和 Xamarin 工具全都可以安裝在 Windows 和 macOS 上並執行。 建議使用下列設定:

  • Windows 10 含 Visual Studio 2019
  • macOS Mojave (10.11+) 與 Visual Studio 2019 for Mac

Xamarin 提供統一安裝程式,其會使用必要 Java、Android 和 Xamarin 工具來設定系統(包括螢幕配置的可視化設計工具)。 如需詳細指示, 請參閱 Xamarin.Android 安裝指南

您可以在沒有Google授權的真實裝置上建置和測試應用程式,不過,透過商店(如Google Play、Amazon或 Barnes & Noble)發佈您的應用程式,可能會向操作員支付註冊費用。 Google Play 將立即發佈您的應用程式,而其他商店的核准程式與 Apple 類似。

Windows

Windows 應用程式 (WinForms、WPF 或 UWP) 是使用 Visual Studio 所建置。 它們不會直接使用 Xamarin。 不過,C# 程式代碼可以在 Windows、iOS 和 Android 之間共用。 請流覽 Microsoft 的 開發人員中心,以瞭解 Windows 開發所需的工具。

建立使用者介面 (UI)

使用 Xamarin 的主要優點是應用程式使用者介面在每個平臺上都使用原生控件,建立與以 或 Java 撰寫 Objective-C 的應用程式無關的應用程式(分別適用於 iOS 和 Android)。

在應用程式中建置畫面時,您可以使用每個平臺可用的設計工具,在程式碼中配置控制件,或建立完整的畫面。

以程序設計方式建立控制件

每個平臺都允許使用程式代碼將使用者介面控制項新增至畫面。 這很耗時,因為當控制位置和大小的硬式編碼圖元座標時,很難將完成的設計可視化。

不過,以程式設計方式建立控件的優點,特別是在iOS上,用於建置在i電話和iPad螢幕大小之間以不同方式調整或轉譯的檢視。

可視化設計工具

每個平臺都有不同的方法來以視覺化方式設定螢幕:

  • iOS – 分鏡腳本包含多個檢視和控件,而且可以在 中 存取。專案中包含的分鏡腳本 檔案。
  • Android – Xamarin 提供適用於 Visual Studio 的 Android 拖放 UI 設計工具。
  • Windows – Microsoft 在 Visual Studio 和 Blend 中提供拖放 UI 設計工具。 螢幕設定會儲存為 。XAML 檔案。

這些螢幕快照顯示每個平臺上可用的視覺化畫面設計工具:

These screenshots show the visual screen designers available on each platform

在所有情況下,您以可視化方式建立的元素都可以在程式代碼中參考。

使用者介面考慮

使用 Xamarin 建置跨平台應用程式的主要優點是,他們可以利用原生 UI 工具組向用戶呈現熟悉的介面。 UI 也會以任何其他原生應用程式的速度執行。

某些UI隱喻可跨多個平台運作(例如,這三個平臺都使用類似的捲動清單控件),但為了讓應用程式「感覺」正確,UI 應該在適當時利用平臺特定的使用者介面元素。 平臺特定 UI 隱喻的範例包括:

  • iOS – 階層式導覽與柔和返回按鈕、畫面底部的索引標籤。
  • Android – 硬體/系統軟體返回按鈕、動作功能表、畫面頂端的索引標籤。
  • Windows – Windows 應用程式可以在桌面電腦、平板電腦(例如 Microsoft Surface)和手機上執行。 例如,Windows 10 裝置可能會有硬體返回按鈕和動態磚。

建議您閱讀與目標平臺相關的設計指導方針:

連結庫和程式代碼重複使用

Xamarin 平臺可讓您在所有平臺上重複使用現有的 C# 程式代碼,以及針對每個平臺原生撰寫的連結庫整合。

C# 來源和連結庫

因為 Xamarin 產品使用 C# 和 .NET Framework,因此許多現有的原始程式碼(開放原始碼 和內部專案)都可以在 Xamarin.iOS 或 Xamarin.Android 專案中重複使用。 來源通常只能新增至 Xamarin 解決方案,而且會立即運作。 如果使用不支援的 .NET Framework 功能,可能需要一些調整。

可用於 Xamarin.iOS 或 Xamarin.Android 的 C# 來源範例包括:SQLite-NET、NewtonSoft.JSON 和 SharpZipLib。

Objective-C 系結 + 系結專案

Xamarin 提供名為 btouch 的工具,可協助建立可讓 Objective-C 連結庫用於 Xamarin.iOS 專案中的系結。 如需如何完成這項作業的詳細資訊,請參閱系 結 Objective-C 類型檔

可用於 Xamarin.iOS 的連結 Objective-C 庫範例包括:RedLaser 條碼掃描、Google Analytics 和 PayPal 整合。 開放原始碼 Xamarin.iOS 系結可在 GitHub取得。

.jar系結 + 系結專案

Xamarin 支援在 Xamarin.Android 中使用現有的 Java 連結庫。 如需如何使用 的詳細數據, 請參閱系結 Java 連結庫檔 。來自 Xamarin.Android 的 JAR 檔案。

開放原始碼 Xamarin.Android 系結可在 GitHub取得。

C 透過 PInvoke

「平台調用」技術 (P/Invoke) 允許 Managed 程式代碼 (C#) 在原生連結庫中呼叫方法,以及支援原生連結庫回呼至 Managed 程式代碼。

例如, SQLite-NET 連結庫會使用如下的語句:

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

這會系結至 iOS 和 Android 中的原生 C 語言 SQLite 實作。 熟悉現有 C API 的開發人員可以建構一組 C# 類別,以對應至原生 API 並利用現有的平台程式代碼。 有檔可用來 連結 Xamarin.iOS 中的原生連結庫 ,類似原則適用於 Xamarin.Android。

透過 CppSharp 的 C++

米格爾在他的博客解釋了 CXXI (現在叫 CppSharp)。 直接系結至 C++ 連結庫的替代方法是建立 C 包裝函式,並透過 P/Invoke 系結至該包裝函式。