Xamarin.Android2025年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 作为编程语言进行开发。 ![]() Android 平台架构Android 操作系统是一个基于 Linux 的软件组件堆栈,可以分为五个部分,如下图所示。 ![]() 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 有两个主要特性。
原生 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 应用程序可以通过调用 .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 开发。 ![]() 设置和安装在这里,我们将定义如何在 Windows 和 macOS 上使用 Visual Studio 安装和配置 Xamarin.Android。如何使用 Android SDK 管理器下载和安装构建和测试应用所需的 Android SDK 工具和组件,以及如何将物理 Android 设备连接到我们的开发计算机以进行调试和测试应用程序。 安装Xamarin 可以作为新 Visual Studio 2017 的一部分进行安装。为此,我们必须按照以下步骤操作
![]() 选择 **.NET 移动开发** 后,我们可以在此处选择要安装的移动开发选项。 ![]() 当 Visual Studio 2017 安装开始时,单击右下角的按钮进行安装。 ![]() 这取决于安装的是哪个版本的 Visual Studio 2017,安装过程可能需要很长时间才能完成。我们可以使用进度条来监视安装。 ![]() 安装完成后,单击 **启动** 按钮来启动 Visual Studio。 ![]() 设置 Xamarin.Android 的 Android SDKVisual Studio 包含一个 Android SDK 管理器,我们可以使用它下载开发 Xamarin.Android 应用所需的 Android SDK 工具和其他组件。 Xamarin.Android SDK 管理器帮助我们下载最新的 Android 组件,用于开发我们的 Xamarin.Android 应用。它取代了已弃用的 Google 独立 SDK 管理器。 SDK 管理器要在 Visual Studio 中启动 SDK 管理器,请单击 **工具 -> Android -> Android SDK 管理器**。 ![]() Android SDK 管理器显示屏幕上的 Android SDK。屏幕有两个选项卡 - **工具和平台**。 ![]() Android SDK 位置Android SDK 的位置显示在 Android SDK 和工具屏幕的顶部,如图所示。以下原因需要设置 Android SDK 的位置
要设置 Android SDK 位置,请单击 Android SDK 位置右侧的省略号 (...) 按钮。这将打开“浏览文件夹”对话框,用于导航到 Android SDK 的位置。屏幕截图显示正在选择 `Program Files (x86)\Android` 下的 Android SDK。 ![]() 当我们在位于该位置的 Android SDK 上单击 **确定** 时,SDK 管理器将开始管理。 工具选项卡工具选项卡显示工具和附加组件的列表。我们使用此选项卡来安装 Android SDK 工具、平台工具和构建工具。此外,我们还可以安装 Android 模拟器、HAXM 加速、底层调试器 (LLDB)、NDK 和 Google Play 库。 例如:要下载 Google 的 Android 模拟器包,请单击 Android 模拟器旁边的复选标记,然后单击“应用(更改)”按钮。 ![]() 将显示一个对话框,提示 **以下软件包要求我们在安装前接受其许可条款**。 ![]() 如果我们同意条款和条件,请单击“接受”。窗口底部有一个进度条指示下载和安装的进度。安装完成后,“工具”选项卡会显示已安装所选的工具和附加组件。 平台选项卡平台选项卡显示 SDK 版本列表以及每个平台的其他资源(如系统映像)。 ![]() 此屏幕显示 Android 的版本(例如 **Android 8.0**)、代号(**Oreo**)、API 级别(例如 26)以及该平台组件的大小(例如 1 GB)。我们使用“平台”选项卡安装我们想要定位的 Android API 级别的组件。 当一个平台的全部组件安装完毕后,平台名称旁边会出现一个复选标记。如果平台的所有组件未安装,则该平台的框将填充。我们可以通过单击平台左侧的 + 框来展开平台以查看其组件(以及已安装的组件)。单击 - 可关闭平台的组件列表。 要向 SDK 添加另一个平台,请单击平台旁边的框,直到出现复选标记以安装其所有组件,然后单击 **应用更改**。 ![]() 要仅安装特定组件,请单击平台旁边的框。然后,我们可以选择所需的任何单个组件。 ![]() 注意:要安装的组件数量显示在“应用更改”按钮旁边。单击“应用更改”按钮后,我们将看到“许可证接受”屏幕,如前所述。当有多个组件需要安装时,我们会多次看到此对话框。底部将有一个进度条指示下载和安装的进度。当下载和安装过程完成时(这可能需要很多分钟,具体取决于需要下载多少组件)。添加的组件将标记为复选标记并显示为“已安装”。 存储库选择默认情况下,Android SDK 管理器从 Microsoft 管理的存储库下载平台组件和工具。如果需要访问 Microsoft 存储库中不可用的 alpha/beta 平台和工具。我们可以将 SDK 管理器切换到使用 Google 的存储库。要进行此切换,请单击右下角的齿轮图标,然后选择 **存储库 > Google (不受支持)**。 ![]() 当我们选择 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 模拟器的虚拟化技术。
在 Windows 上,我们使用 HAXM 来加速 Android 模拟器。如果我们的计算机上没有 HAXM,则可以使用 Windows Hypervisor Platform (WHPX)。 如果满足以下条件,Android 模拟器将自动使用硬件加速
使用 Hyper-V 加速 Hyper-V 是加速 Android 模拟器的选择。在启用 Hyper-V 之前,我们首先必须验证系统是否满足支持 Windows Hypervisor Platform 的条件。 验证对 Hyper-V 的支持 Hyper-V 运行在 Windows Hypervisor Platform 上。要使用带 Hyper-V 的 Android 模拟器,计算机必须满足以下条件才能支持 Windows Hypervisor Platform:
![]() 要验证我们的计算机硬件和软件是否与 Hyper-V 兼容,请打开命令提示符,然后键入以下命令: 如果列出的所有 Hyper-V 要求的值均为 **是**,则计算机支持 Hyper-V。例如: ![]() 启用 Hyper-V 加速 如果计算机满足上述条件,我们将按照以下步骤使用 Hyper-V 激活 Android 模拟器: 1. 在搜索框中输入 Windows 功能,然后在搜索结果中选择 **启用或关闭 Windows 功能**。在“Windows 功能”对话框中,同时启用 Hyper-V 和 Windows Hypervisor Platform。 ![]()
![]() 当我们创建虚拟设备(**请参阅使用 Android 设备管理器管理虚拟设备**)时,请务必选择 **基于 x86** 的系统映像。如果使用基于 ARM 的系统映像,则虚拟设备将不会被加速,并且运行速度会很慢。 使用 HAXM 加速 要确定我们的硬件是否支持 HAXM,我们必须按照以下步骤操作:我的处理器是否支持 Intel 虚拟化技术?。如果设备支持 HAXM,我们可以使用以下命令检查 HAXM 是否已安装: 1. 打开命令提示符窗口并输入以下命令: 2. 我们将检查输出以查看 HAXM 进程是否正在运行。如果是,我们应该看到列出 `intelhaxm state` 为 `RUNNING` 的输出。例如: ![]() 1. 如果 `STATE` 未设置为 `RUNNING`,则 HAXM 未安装。 如果计算机支持 HAXM,但 HAXM 未安装,我们将在下一节中使用这些步骤来安装 HAXM。 安装 HAXM HAXM 安装适用于 Windows 的软件包,这些软件包可从 Intel Hardware Accelerated Execution Manager 页面获取。要下载和安装 HAXM,我们请按照以下步骤操作:
![]() 创建虚拟设备时,请务必选择 **基于 x86** 的系统映像。如果使用基于 ARM 的系统映像,则虚拟设备将不会被加速,并且运行速度会很慢。 使用 Android 设备管理器管理虚拟设备在这里,我们将介绍如何使用 Android 设备管理器创建和配置 Android 虚拟设备。我们可以使用这些虚拟设备来运行和测试应用程序,而无需依赖物理设备。 启用硬件加速后,下一步是使用 Android 设备管理器创建可用于测试和调试应用程序的虚拟设备。 Windows 上的 Android 设备管理器在这里,我们将介绍如何使用 Android 设备管理器创建、自定义和启动 Android 虚拟设备。 ![]() 我们使用 Android 设备管理器创建和配置在 Android 模拟器中运行的 Android 虚拟设备 (AVD)。每个 AVD 都是模拟物理 Android 设备的模拟器配置。 要求要使用 Android 设备管理器,我们需要以下项目:
必须安装以下软件包(通过 Android SDK 管理器):
这些软件包应显示为 **已安装** 状态,如以下屏幕截图所示。 ![]() 启动设备管理器我们将通过单击 **工具 -> Android -> Android 设备管理器** 来从 **工具** 启动 Android 设备管理器。 ![]() 主屏幕当我们启动 Android 设备管理器时,它会显示一个屏幕,其中列出了所有已配置的虚拟设备。对于每个虚拟设备,将显示 **操作系统(Android 版本)、名称、内存大小、处理器和屏幕分辨率**。 ![]() 当我们选择列表中的设备时,右侧会出现 **启动** 按钮。我们可以单击“启动”按钮以使用此虚拟设备启动模拟器。 ![]() 当模拟器使用选定的虚拟设备启动时,**启动** 按钮会变为 **停止**,我们可以使用它来停止模拟器。 新设备要创建新设备,请单击 **新建** 按钮。 ![]() 单击 **新建** 以启动 **新设备** 屏幕。 ![]() 要配置 **新设备** 屏幕中的新设备,请按照以下步骤操作: 1. 在此处,我们必须为设备命名。在此示例中,创建了一个名为 **Android1** 的新设备。 ![]() 2. 单击 **基础设备** 选择要模拟的物理设备,然后单击菜单。 ![]() 3. 现在,我们通过单击处理器菜单来选择虚拟设备的处理器类型。现在我们选择 **x86**,它提供最佳性能,因为它启用了 **硬件加速**。**x86_64** 选项也利用硬件加速,但它的运行速度比 **x86** 稍慢。 ![]() 4. 单击菜单中的 **操作系统** 选择 Android 版本。例如,选择 **Oreo 8.1 - API 27** 来为 API 级别 27 创建虚拟设备。 ![]() 如果我们选择尚未安装的 Android API 级别,设备管理器将在屏幕底部显示消息。**将下载新设备** - 在创建新虚拟设备时,它将下载并安装必要的文件。 ![]() 如果我们希望在虚拟设备中包含 Google Play 服务 API,请启用 **Google API** 选项。要包含 Google Play 商店应用,我们将启用 **Google Play 商店** 选项。 ![]() 请注意,Google Play 商店的映像仅适用于某些基础设备类型,例如 Pixel、Pixel 2、Nexus 5 和 Nexus 5X。 6. 编辑任何需要修改的属性。 7. 添加任何需要显式设置的附加属性。**新设备** 屏幕仅显示最常用的属性,但我们可以单击(底部的)**添加属性** 下拉菜单来添加附加属性。 ![]() 我们还可以通过选择属性列表顶部的自定义选项来定义自定义属性。 8. 单击创建按钮以创建新设备。 ![]() 9. 我们可能会看到许可证接受屏幕。单击“接受”。 ![]() 10. Android 设备管理器会将新设备添加到已安装虚拟设备的列表中,并在设备创建过程中显示 **正在创建** 的进度指示器。 ![]() 11. 创建完成后,新设备将显示在已安装虚拟设备的列表中,并带有一个 **启动** 按钮。 ![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。