Xamarin.Android

2025年3月17日 | 阅读 15 分钟

Xamarin.Android 是 Xamarin 系列的一部分,用于使用 C# 和 Xamarin 构建原生 Android 应用。Xamarin.Android 提供了与 Java 中的 Android 相同的 UI 控件。在继续之前,我们将重点介绍 Android 架构和使用 Java 的开发工具。

Android 开发

Android 是一个基于 Linux 内核的开源操作系统。Android 最初由 Android incorporation 开发,后被 Google 收购。Android 提供了丰富的应用程序框架,使我们能够使用 Java 环境为移动设备构建创新的应用程序和游戏。

原生 Android 应用可以使用 Android Studio 或 Eclipse 结合 Java 作为编程语言进行开发。

Xamarin.Android

Android 平台架构

Android 操作系统是一个基于 Linux 的软件组件堆栈,可以分为五个部分,如下图所示。

Xamarin.Android

Linux 内核

Linux 内核提供了多任务执行环境,允许多个进程并发执行。Android Runtime (ART) 依赖于 Linux 内核来完成所有功能,例如底层内存管理和线程处理。

硬件抽象层 (HAL)

硬件抽象层 (HAL) 帮助 Android/应用程序框架通过更高级别的 Java API 与硬件特定设备驱动程序进行通信。Android HAL 包含多个针对特定类型硬件组件的库模块,例如相机和蓝牙模块。因此,当我们通过 Java API 调用访问硬件设备时,Android 系统会加载该硬件组件的库模块。

Android 运行时

每个基于 Android 5.0 或更高版本的 Android 应用都在自己的进程中运行,并拥有自己的 Android Runtime (ART) 实例。ART 被编写成在低内存设备上运行多个虚拟机 (VM)。

应用程序的代码必须从标准的 Java 类文件转换为 Dalvik 可执行文件 (.dex) 格式,才能在 ART 中执行。数据经过优化,内存占用比 Java 字节码少 50%。构建工具链,例如将 Java 源代码编译成 DEX 字节码,以便在 Android 平台上运行。

与 Dalvik 相比,ART 有两个主要特性。

  1. 提前 (AOT) 编译,这提高了速度并减少了内存占用。
  2. ART 优化垃圾回收。

原生 C/C++ 库

C/C++ 库提供了更广泛的功能,包括 2D 和 3D 图形绘制、安全套接字层 (SSL) 通信、SQLite 数据库管理、媒体管理(如音频和视频播放)、显示子系统、图形层管理以及 C 系统库 (libs) 的实现。

Android 应用可以通过基于 Java 的 Android 核心库 API 访问这些库。此外,我们还可以使用 Android Native Development Kit (NDK) 中的 Java Native Interface (JNI) 在 Java 代码中使用这些原生 C/C++ 库。

Java API 框架

Java API 框架是一组丰富、可扩展的 API,允许使用 Java 语言访问 Android OS 的全部功能集。这些 API 有助于与原生 C/C++ 库交互,并为各种任务管理(如 Activity 管理、通知管理、资源管理等)构建丰富的 UI。

系统应用和第三方应用

Android 操作系统附带一套系统应用程序,用于电子邮件、电话、短信、日历、互联网浏览、联系人等。除了系统应用程序,我们还可以安装 Outlook、Chat、Twitter、Facebook 等第三方电子邮件、短信应用。

Xamarin.Android 架构

Xamarin.Android 应用程序在 Mono 执行环境中运行。Mono 运行时是用 C 语言编写的,与 Android Runtime (ART) 虚拟机并行运行。两种运行时环境都运行在 Linux 内核之上,并公开各种 API 来访问 Android 系统。

Xamarin.Android

Xamarin.Android 应用程序可以通过调用 .Net API 或使用 Android 命名空间中暴露的类来访问 Android 操作系统的各种底层功能,这些类提供了与 Java API 的桥梁。这些是通过 Android 运行时提供的。

托管可调用包装器 (MCW)

Android 操作系统的一些功能,如音频、图形、OpenGL 和电话,对原生应用程序不可直接用。它们仅通过 Android.* 命名空间或 Java.* 命名空间中提供的 Android Runtime Java API 公开。

因此,要在 Xamarin.Android 中访问这些 API,需要一个托管可调用包装器,它充当 JNI (Java Native Interface) 桥梁来调用 Android 代码,并提供对覆盖虚方法和实现 Java 接口的支持。

Android 可调用包装器 (ACW)

Android 可调用包装器 (ACW) 是一个 JNI 桥梁,用于在需要 Android Runtime 时调用托管代码。当从 Java 创建 Android 可调用包装器 (ACW) 时,ACW 构造函数会调用相应的 C# 构造函数。

Xamarin.Android 开发

Xamarin.Android 允许我们使用 C# 构建原生 Android 应用程序。Xamarin.Android 项目基于 Android 项目的标准结构,就像我们使用 Android Studio 或 Eclipse 创建的那样。我们可以使用 IDE - Xamarin Studio 或 Visual Studio for Mac 和 Visual Studio for Windows 进行 Xamarin.Android 开发。

Xamarin.Android

设置和安装

在这里,我们将定义如何在 Windows 和 macOS 上使用 Visual Studio 安装和配置 Xamarin.Android。如何使用 Android SDK 管理器下载和安装构建和测试应用所需的 Android SDK 工具和组件,以及如何将物理 Android 设备连接到我们的开发计算机以进行调试和测试应用程序。

安装

Xamarin 可以作为新 Visual Studio 2017 的一部分进行安装。为此,我们必须按照以下步骤操作

  1. 从 Visual Studio 页面下载 Visual Studio 2017 Community、Visual Studio Professional 或 Visual Studio Enterprise。
  2. 要开始安装,请双击下载的包。
  3. 从安装屏幕中选择 **.NET 移动开发** 工作负载。
Xamarin.Android

选择 **.NET 移动开发** 后,我们可以在此处选择要安装的移动开发选项。

Xamarin.Android

当 Visual Studio 2017 安装开始时,单击右下角的按钮进行安装。

Xamarin.Android

这取决于安装的是哪个版本的 Visual Studio 2017,安装过程可能需要很长时间才能完成。我们可以使用进度条来监视安装。

Xamarin.Android

安装完成后,单击 **启动** 按钮来启动 Visual Studio。

Xamarin.Android

设置 Xamarin.Android 的 Android SDK

Visual Studio 包含一个 Android SDK 管理器,我们可以使用它下载开发 Xamarin.Android 应用所需的 Android SDK 工具和其他组件。

Xamarin.Android SDK 管理器帮助我们下载最新的 Android 组件,用于开发我们的 Xamarin.Android 应用。它取代了已弃用的 Google 独立 SDK 管理器。

SDK 管理器

要在 Visual Studio 中启动 SDK 管理器,请单击 **工具 -> Android -> Android SDK 管理器**。

Xamarin.Android

Android SDK 管理器显示屏幕上的 Android SDK。屏幕有两个选项卡 - **工具和平台**。

Xamarin.Android

Android SDK 位置

Android SDK 的位置显示在 Android SDK 和工具屏幕的顶部,如图所示。以下原因需要设置 Android SDK 的位置

  1. Android SDK 管理器未能定位 Android SDK。
  2. 我们必须在备用 (非默认) 位置安装 Android SDK。

要设置 Android SDK 位置,请单击 Android SDK 位置右侧的省略号 (...) 按钮。这将打开“浏览文件夹”对话框,用于导航到 Android SDK 的位置。屏幕截图显示正在选择 `Program Files (x86)\Android` 下的 Android SDK。

Xamarin.Android

当我们在位于该位置的 Android SDK 上单击 **确定** 时,SDK 管理器将开始管理。

工具选项卡

工具选项卡显示工具和附加组件的列表。我们使用此选项卡来安装 Android SDK 工具、平台工具和构建工具。此外,我们还可以安装 Android 模拟器、HAXM 加速、底层调试器 (LLDB)、NDK 和 Google Play 库。

例如:要下载 Google 的 Android 模拟器包,请单击 Android 模拟器旁边的复选标记,然后单击“应用(更改)”按钮。

Xamarin.Android

将显示一个对话框,提示 **以下软件包要求我们在安装前接受其许可条款**。

Xamarin.Android

如果我们同意条款和条件,请单击“接受”。窗口底部有一个进度条指示下载和安装的进度。安装完成后,“工具”选项卡会显示已安装所选的工具和附加组件。

平台选项卡

平台选项卡显示 SDK 版本列表以及每个平台的其他资源(如系统映像)。

Xamarin.Android

此屏幕显示 Android 的版本(例如 **Android 8.0**)、代号(**Oreo**)、API 级别(例如 26)以及该平台组件的大小(例如 1 GB)。我们使用“平台”选项卡安装我们想要定位的 Android API 级别的组件。

当一个平台的全部组件安装完毕后,平台名称旁边会出现一个复选标记。如果平台的所有组件未安装,则该平台的框将填充。我们可以通过单击平台左侧的 + 框来展开平台以查看其组件(以及已安装的组件)。单击 - 可关闭平台的组件列表。

要向 SDK 添加另一个平台,请单击平台旁边的框,直到出现复选标记以安装其所有组件,然后单击 **应用更改**。

Xamarin.Android

要仅安装特定组件,请单击平台旁边的框。然后,我们可以选择所需的任何单个组件。

Xamarin.Android

注意:要安装的组件数量显示在“应用更改”按钮旁边。单击“应用更改”按钮后,我们将看到“许可证接受”屏幕,如前所述。当有多个组件需要安装时,我们会多次看到此对话框。底部将有一个进度条指示下载和安装的进度。当下载和安装过程完成时(这可能需要很多分钟,具体取决于需要下载多少组件)。添加的组件将标记为复选标记并显示为“已安装”。

存储库选择

默认情况下,Android SDK 管理器从 Microsoft 管理的存储库下载平台组件和工具。如果需要访问 Microsoft 存储库中不可用的 alpha/beta 平台和工具。我们可以将 SDK 管理器切换到使用 Google 的存储库。要进行此切换,请单击右下角的齿轮图标,然后选择 **存储库 > Google (不受支持)**。

Xamarin.Android

当我们选择 Google 存储库时,平台选项卡中可能会出现以前不存在的其他软件包。在这里,我们必须意识到使用 Google 存储库不受支持,并且不建议用于日常开发。

要移回到受支持的平台和工具存储库,我们将单击 **Microsoft (推荐)**。这将把软件包和工具列表恢复到默认选择。

Android 模拟器设置

在这里,我们将解释如何准备 Android 模拟器来测试应用程序。

Android 模拟器可以运行在各种配置中来模拟不同的设备。每个配置都称为虚拟设备。当我们模拟器中部署和测试应用程序时,我们将选择一个预配置或自定义的虚拟设备,该设备模拟物理 Android 设备,例如 Nexus 或 Pixel 手机。

模拟器性能的硬件加速(Hyper V 和 HAXM)

在这里,我们将学习如何利用计算机的硬件加速功能来最大限度地提高 Android 模拟器的性能。

在 Android 设备不可用的情况下,Visual Studio 可以方便开发人员通过 Android 模拟器测试和调试 Xamarin.Android 应用程序。但是,如果计算机上不可用硬件加速,Android 模拟器将运行缓慢。通过使用与计算机虚拟化功能相结合的特定 x86 虚拟设备映像,我们可以提高 Android 模拟器的性能。

加速 Windows 上的 Android 模拟器

以下是可用于加速 Android 模拟器的虚拟化技术。

  1. Windows Hypervisor Platform (WHPX) 和 Microsoft 的 Hyper-V: Hyper-V 是 Windows 的虚拟化功能,它可以在物理主机计算机上运行虚拟化计算机系统。
  2. Intel 的硬件加速执行管理器 (HAXM): HAXM 是用于运行 Intel CPU 计算机的虚拟化引擎。

在 Windows 上,我们使用 HAXM 来加速 Android 模拟器。如果我们的计算机上没有 HAXM,则可以使用 Windows Hypervisor Platform (WHPX)。

如果满足以下条件,Android 模拟器将自动使用硬件加速

  • 硬件加速可用,并且已在我们的计算机系统上启用。
  • 模拟器正在运行为基于 x-86 的虚拟设备创建的系统映像。

使用 Hyper-V 加速

Hyper-V 是加速 Android 模拟器的选择。在启用 Hyper-V 之前,我们首先必须验证系统是否满足支持 Windows Hypervisor Platform 的条件。

验证对 Hyper-V 的支持

Hyper-V 运行在 Windows Hypervisor Platform 上。要使用带 Hyper-V 的 Android 模拟器,计算机必须满足以下条件才能支持 Windows Hypervisor Platform:

  • 计算机必须满足以下要求
    • 支持二级地址转换 (SLAT) 的 64 位 Intel 或 AMD Ryzen CPU。
    • CPU 支持虚拟机监控器模式扩展 (Intel CPU 上的 VT-c)。
    • 至少 4 GB 内存。
  • 在计算机的 BIOS 中,必须启用以下项目
    • 虚拟化技术(该标签取决于主板制造商)。
    • 硬件强制执行数据执行保护。
  • 我们的计算机必须更新到 Windows 10 April 2018 更新 (build 1803) 或更高版本。我们可以按照以下步骤来验证我们的 Windows 版本是否是最新的
    1. 在 Windows 搜索框中输入 **关于**。
    2. 在搜索结果中选择 **关于我的电脑**。
    3. 在“关于”对话框的 **规格** 部分中向下滚动到 Windows。
    4. 验证 **版本** 是否至少为 1803。
Xamarin.Android

要验证我们的计算机硬件和软件是否与 Hyper-V 兼容,请打开命令提示符,然后键入以下命令:

如果列出的所有 Hyper-V 要求的值均为 **是**,则计算机支持 Hyper-V。例如:

Xamarin.Android

启用 Hyper-V 加速

如果计算机满足上述条件,我们将按照以下步骤使用 Hyper-V 激活 Android 模拟器:

1. 在搜索框中输入 Windows 功能,然后在搜索结果中选择 **启用或关闭 Windows 功能**。在“Windows 功能”对话框中,同时启用 Hyper-V 和 Windows Hypervisor Platform。

Xamarin.Android
  1. 进行这些更改后,重新启动计算机。
  2. 安装 Visual Studio 15.8 或更高版本(此版本的 Visual Studio 支持使用 Hyper-V 运行 Android 模拟器)。
  3. 安装 Android 模拟器包 27.2.7 或更高版本。 要安装此包,我们将导航到 Visual Studio 中的 **工具 > Android > Android SDK 管理器**。选择“工具”选项卡,并确保 Android 模拟器版本至少为 27.2.7。同时确保 Android SDK 工具版本为 26.1.1 或更高版本。
Xamarin.Android

当我们创建虚拟设备(**请参阅使用 Android 设备管理器管理虚拟设备**)时,请务必选择 **基于 x86** 的系统映像。如果使用基于 ARM 的系统映像,则虚拟设备将不会被加速,并且运行速度会很慢。

使用 HAXM 加速

要确定我们的硬件是否支持 HAXM,我们必须按照以下步骤操作:我的处理器是否支持 Intel 虚拟化技术?。如果设备支持 HAXM,我们可以使用以下命令检查 HAXM 是否已安装:

1. 打开命令提示符窗口并输入以下命令:

2. 我们将检查输出以查看 HAXM 进程是否正在运行。如果是,我们应该看到列出 `intelhaxm state` 为 `RUNNING` 的输出。例如:

Xamarin.Android

1. 如果 `STATE` 未设置为 `RUNNING`,则 HAXM 未安装。

如果计算机支持 HAXM,但 HAXM 未安装,我们将在下一节中使用这些步骤来安装 HAXM。

安装 HAXM

HAXM 安装适用于 Windows 的软件包,这些软件包可从 Intel Hardware Accelerated Execution Manager 页面获取。要下载和安装 HAXM,我们请按照以下步骤操作:

  1. 从 Intel 网站下载适用于 Windows 的最新 HAXM 虚拟化引擎安装程序。直接从 Intel 网站下载 HAXM 安装程序的优点是我们可以确保使用的是最新版本。
  2. 运行 **intelhaxm-android.exe** 来启动 HAXM 安装程序。在安装程序对话框中接受默认值。
Xamarin.Android

创建虚拟设备时,请务必选择 **基于 x86** 的系统映像。如果使用基于 ARM 的系统映像,则虚拟设备将不会被加速,并且运行速度会很慢。

使用 Android 设备管理器管理虚拟设备

在这里,我们将介绍如何使用 Android 设备管理器创建和配置 Android 虚拟设备。我们可以使用这些虚拟设备来运行和测试应用程序,而无需依赖物理设备。

启用硬件加速后,下一步是使用 Android 设备管理器创建可用于测试和调试应用程序的虚拟设备。

Windows 上的 Android 设备管理器

在这里,我们将介绍如何使用 Android 设备管理器创建、自定义和启动 Android 虚拟设备。

Xamarin.Android

我们使用 Android 设备管理器创建和配置在 Android 模拟器中运行的 Android 虚拟设备 (AVD)。每个 AVD 都是模拟物理 Android 设备的模拟器配置。

要求

要使用 Android 设备管理器,我们需要以下项目:

  • Visual Studio 2019 Community、Professional 和 Enterprise。
  • 或者我们可以使用 Visual Studio 2017 版本 15.8 或更高版本。支持 Visual Studio Community、Enterprise 和 Professional。
  • Xamarin 的 Visual Studio 工具版本 4.9。
  • 必须安装 Android SDK(请参阅设置 Xamarin.Android 的 Android SDK)。我们必须确保在安装位置安装 Android SDK,如果尚未安装:**C:\Program Files (x86)\Android\android-SDK**。

必须安装以下软件包(通过 Android SDK 管理器):

  • Android SDK Tools 版本 26.1.1 或更高版本
  • Android SDK Platform-Tools 27.0.1 或更高版本
  • Android SDK Build-Tools 27.0.3 或更高版本
  • Android Emulator 27.2.7 或更高版本。

这些软件包应显示为 **已安装** 状态,如以下屏幕截图所示。

Xamarin.Android

启动设备管理器

我们将通过单击 **工具 -> Android -> Android 设备管理器** 来从 **工具** 启动 Android 设备管理器。

Xamarin.Android

主屏幕

当我们启动 Android 设备管理器时,它会显示一个屏幕,其中列出了所有已配置的虚拟设备。对于每个虚拟设备,将显示 **操作系统(Android 版本)、名称、内存大小、处理器和屏幕分辨率**。

Xamarin.Android

当我们选择列表中的设备时,右侧会出现 **启动** 按钮。我们可以单击“启动”按钮以使用此虚拟设备启动模拟器。

Xamarin.Android

当模拟器使用选定的虚拟设备启动时,**启动** 按钮会变为 **停止**,我们可以使用它来停止模拟器。

新设备

要创建新设备,请单击 **新建** 按钮。

Xamarin.Android

单击 **新建** 以启动 **新设备** 屏幕。

Xamarin.Android

要配置 **新设备** 屏幕中的新设备,请按照以下步骤操作:

1. 在此处,我们必须为设备命名。在此示例中,创建了一个名为 **Android1** 的新设备。

Xamarin.Android

2. 单击 **基础设备** 选择要模拟的物理设备,然后单击菜单。

Xamarin.Android

3. 现在,我们通过单击处理器菜单来选择虚拟设备的处理器类型。现在我们选择 **x86**,它提供最佳性能,因为它启用了 **硬件加速**。**x86_64** 选项也利用硬件加速,但它的运行速度比 **x86** 稍慢。

Xamarin.Android

4. 单击菜单中的 **操作系统** 选择 Android 版本。例如,选择 **Oreo 8.1 - API 27** 来为 API 级别 27 创建虚拟设备。

Xamarin.Android

如果我们选择尚未安装的 Android API 级别,设备管理器将在屏幕底部显示消息。**将下载新设备** - 在创建新虚拟设备时,它将下载并安装必要的文件。

Xamarin.Android

如果我们希望在虚拟设备中包含 Google Play 服务 API,请启用 **Google API** 选项。要包含 Google Play 商店应用,我们将启用 **Google Play 商店** 选项。

Xamarin.Android

请注意,Google Play 商店的映像仅适用于某些基础设备类型,例如 Pixel、Pixel 2、Nexus 5 和 Nexus 5X。

6. 编辑任何需要修改的属性。

7. 添加任何需要显式设置的附加属性。**新设备** 屏幕仅显示最常用的属性,但我们可以单击(底部的)**添加属性** 下拉菜单来添加附加属性。

Xamarin.Android

我们还可以通过选择属性列表顶部的自定义选项来定义自定义属性。

8. 单击创建按钮以创建新设备。

Xamarin.Android

9. 我们可能会看到许可证接受屏幕。单击“接受”。

Xamarin.Android

10. Android 设备管理器会将新设备添加到已安装虚拟设备的列表中,并在设备创建过程中显示 **正在创建** 的进度指示器。

Xamarin.Android

11. 创建完成后,新设备将显示在已安装虚拟设备的列表中,并带有一个 **启动** 按钮。

Xamarin.Android