本文概述
Xamarin.Android是Xamarin家族的一部分, 可使用C#和Xamarin构建本机android应用。 Xamarin.Android提供的Android UI与我们使用Java的Android相同。在继续进行之前, 我们将重点介绍Java的Android体系结构和开发工具。
Android开发
Android是基于Linux内核的开源操作系统。 Android最初由Android公司注册开发, 并由Google购买。 Android提供了丰富的应用程序框架, 使我们能够在Java环境中为移动设备构建创新的应用程序和游戏。
可以使用Java作为编程语言, 使用Android Studio或Eclipse开发本机Android应用程序。
Android平台架构
android操作系统是基于Linux的软件组件堆栈, 可以分为五个部分, 如下图所示。
Linux内核
Linux内核提供了多任务执行环境, 该环境允许多个进程同时执行。 Android运行时(ART)依赖Linux内核来实现所有功能, 例如低级内存管理和线程化。
硬件抽象层(HAL)
硬件抽象层(HAL)可帮助Android /应用程序框架通过更高级别的Java API与特定于硬件的设备驱动程序进行通信。 Android HAL包含用于特定类型的硬件组件(例如相机和蓝牙模块)的多个库模块。因此, 当我们使用Java API调用访问硬件设备时, Android系统会加载硬件组件的库模块。
Android执行阶段
每个Android应用都基于Android 5.0或更高版本, 并在其过程中以及其Android运行时(ART)实例中运行。编写ART可以在低内存设备上运行多个VMS(虚拟机)。
必须将应用程序的代码从标准Java类文件转换为Dalvik可执行文件(.dex)格式, 才能在ART中执行。与Java字节码相比, 已对数据进行了优化以使其内存最少(消耗的内存减少50%)。构建工具链, 例如将Java源代码编译为DEX字节码, 这些工具链可以在Android平台上运行。
与达尔维克相比, ART具有两个主要特征。
- 提前(AOT)编译可提高速度并减少内存占用。
- ART优化垃圾收集。
本机C / C ++库
C / C ++库提供了更广泛的功能, 包括2D和3D图形绘制, 安全套接字层(SSL)通信, SQLite数据库管理, 诸如音频和视频播放的媒体管理, 显示子系统以及图形层管理和C系统实现库(库)。
Android应用程序可以通过基于Java的Android核心库API访问这些库。同样, 我们可以使用Java Native Interface(JNI)在Java代码中使用Android Native Development Kit(NDK)访问这些Native C / C ++库。
Java API框架
JAVA的API框架是一组丰富的, 可扩展的API, 用于使用Java语言访问Android OS的整个功能集。这些API有助于与本机C / C ++库进行交互, 并为各种任务管理(例如活动管理, 通知管理, 资源管理等)构建丰富的UI。
系统应用程序和第三方应用程序
android操作系统随附了一组用于电子邮件, 电话, 消息, 日历, 互联网浏览, 联系人等的系统应用程序。除了系统应用程序, 我们还可以安装第三方电子邮件, 诸如Outlook, 聊天, Twitter, Facebook等消息。
Xamarin.Android体系结构
Xamarin.Android应用程序在Mono执行环境中运行。 Mono运行时使用C语言编写, 并在Android Runtime(ART)虚拟机中并行运行。两种运行时环境都在Linux内核之上运行, 并公开了各种API以访问android系统。
Xamarin.Android应用程序可以通过调用.Net API或使用Android名称空间中公开的类(它们提供到Java API的桥梁)来访问Android操作系统的各种低级功能。这些由Android运行时提供。
托管可呼叫包装器(MCW)
诸如音频, 图形, OpenGL和电话之类的Android操作系统功能无法直接用于本机应用程序。它们仅通过Android。*命名空间或Java。*命名空间中可用的Android运行时Java API公开。
因此, 要在Xamarin.Android中访问这些API, 需要一个托管的可调用包装器, 该包装器充当JNI(Java本机接口)桥来调用Android代码并提供对重写虚拟方法和实现Java接口的支持。
Android Callable Wrappers(ACW)
Android Callable Wrappers是一个JNI桥, 用于在我们需要Android运行时时调用托管代码。从Java创建Android Callable Wrapper(ACW)时, ACW构造函数调用了相应的C#构造函数。
Xamarin.Android开发
Xamarin.Android允许我们使用C#构建本机Android应用程序。 Xamarin.Android项目基于我们使用Android Studio或Eclipse创建的Android项目的标准结构。我们可以使用IDE进行Xamarin.Android开发-Xamarin Studio或Mac的Visual Studio, 以及Windows的Visual Studio。
安装与安装
在这里, 我们将定义如何安装和配置Xamarin.Android, 使其在Windows和macOS以及Visual Studio上正常工作。如何使用Android SDK管理器下载和安装构建和测试应用程序所需的Android SDK工具和组件, 以及如何将物理Android设备连接到我们的开发计算机以调试和测试我们的应用程序。
安装
Xamarin可以作为新Visual Studio 2017的一部分安装。为此, 我们必须执行以下步骤:
- 从Visual Studio页面下载Visual Studio 2017社区, Visual Studio Professional或Visual Studio Enterprise。
- 要开始安装, 请双击下载的软件包。
- 从安装屏幕中选择Mobile with .NET工作负载的开发。
4.选择使用.NET进行移动开发时, 在这里, 我们可以选择要安装的移动开发选项。
5. Visual Studio 2017安装开始时, 单击右下角的按钮进行安装:
这取决于要安装的Visual Studio 2017版本, 安装过程可能需要很长时间才能完成。我们可以使用进度条来监视安装。
6. Visual Studio 2017安装完成后, 单击”启动”按钮以启动Visual Studio:
为Xamarin.Android设置Android SDK
Visual Studio包含一个Android SDK Manager, 我们可以通过它下载Android SDK工具和开发Xamarin.Android应用所需的其他组件。
Xamarin。 Android SDK Manager可以帮助我们下载最新的Android组件, 从而可以开发Xamarin.Android应用。它取代了已弃用的Google独立SDK管理器。
SDK管理器
要在Visual Studio中启动SDK Manager, 请单击工具-> Android-> Android SDK Manager。
Android SDK Manager在”工具”屏幕的Android SDK中显示。屏幕上有两个选项卡-工具和平台。
Android SDK的位置
Android SDK的位置位于屏幕截图中显示的Android SDK和工具屏幕的顶部。出于以下原因, 需要设置Android SDK的位置:
- Android SDK Manager无法找到Android SDK。
- 我们必须在备用(非默认)位置安装Android SDK。
要设置Android SDK位置, 请单击Android SDK位置右侧的省略号(…)按钮。这将打开”浏览文件夹”对话框, 用于导航到Android SDK的位置。屏幕快照显示已选择”程序文件(x86)\ Android”下的Android SDK:
当我们单击”确定”时, SDK管理器将管理安装在该位置的Android 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 Manager从Microsoft管理的存储库下载平台组件和工具。如果需要访问Microsoft存储库中不可用的alpha / beta平台和工具。我们可以将SDK Manager切换为使用Google的存储库。要进行此切换, 请点击右下角的齿轮图标, 然后选择存储库> Google(不受支持):
当我们选择Google存储库时, 其他软件包可能会显示在”平台”标签中, 而以前的软件包不可用。在此, 我们必须注意, 不支持使用Google存储库, 不建议将其用于日常开发。
要移回到受支持的平台和工具存储库, 我们将单击Microsoft(推荐)。这会将软件包和工具列表恢复为默认选择。
Android模拟器设置
在这里, 我们将说明如何准备Android模拟器来测试该应用。
Android Emulator可以在各种配置中运行以模拟不同的设备。每种配置都称为虚拟设备。当我们在模拟器中部署和测试应用程序时, 我们将选择一个预配置或自定义的虚拟设备, 该设备可模拟Nexus或Pixel手机等物理Android设备。
硬件加速以提高仿真器性能(Hyper V和HAXM)
在这里, 我们将学习如何使用计算机的硬件加速功能来最大化Android模拟器的性能。
在Android设备不可用的情况下, Visual Studio易于开发人员使用Android模拟器测试和调试Xamarin.Android应用程序。但是, 如果计算机上没有硬件加速, 则Android仿真器将运行缓慢。通过结合使用特定的x86虚拟设备映像和计算机的虚拟化功能, 我们可以提高Android仿真器的性能。
在Windows上加速Android模拟器
这里是可用于加速Android模拟器的虚拟化技术。
- Windows Hypervisor平台(WHPX)和Microsoft的Hyper-V:Hyper-V是window的虚拟化功能, 它使在物理主机上运行虚拟化的计算机系统成为可能。
- 英特尔的硬件加速执行管理器(HAXM):HAXM是用于运行计算机Intel CPU的虚拟化引擎。
在Windows上, 我们使用HAXM来加速Android仿真器。如果我们的计算机上没有HAXM, 则可以使用Windows Hypervisor平台(WHPX)。
如果满足以下条件, Android Emulator将自动使用硬件加速:
- 硬件加速可用, 并且已在我们的计算机系统上启用。
- 模拟器正在运行基于虚拟设备为x-86-创建的系统映像。
通过Hyper-V加速
Hyper-V是加速Android模拟器的选择。在启用Hyper-V之前, 首先, 我们必须验证系统是否满足支持Windows Hypervisor平台的条件。
验证对Hyper-V的支持
Hyper-V在Windows Hypervisor平台上运行。要将Android模拟器与Hyper-V一起使用, 计算机必须满足以下条件才能支持Windows Hypervisor平台:
- 该计算机必须满足以下要求:
- 具有二级地址转换(SLAT)的64位Intel或AMD Ryzen CPU。
- VM监视器模式扩展(Intel CPU上的VT-c)的CPU支持。
- 至少4 GB的内存。
- 在计算机的BIOS中, 必须启用以下各项:
- 虚拟化技术(此标签取决于主板制造商)。
- 硬件强制数据执行保护。
- 我们的计算机必须更新为Windows 10 April 2018更新(内部版本1803)或更高版本。我们可以使用以下步骤来验证我们的Windows版本是否为最新版本:
- 在Windows搜索框中输入”关于”。
- 在搜索结果中选择我们电脑的”关于”。
- 在Windows规格部分的”关于”对话框中向下滚动。
- 验证版本至少为1803:
要验证我们的计算机硬件和软件是否与Hyper-V兼容, 请打开命令提示符, 然后键入以下命令:
CMD
SYSTEMINFO
如果列出的所有Hyper-V要求的值均为”是”, 则计算机可以支持Hyper-V。例如:
启用Hyper-V加速
如果计算机满足上述条件, 我们将按照以下步骤使用Hyper-V激活Android仿真器:
1.在搜索框中输入Windows功能, 然后在搜索结果中选择Windows功能的开或关。在” Windows功能”对话框中, 启用Hyper-V和Windows Hypervisor平台:
- 进行这些更改后, 重新启动计算机。
- 安装Visual Studio 15.8或更高版本(此版本的Visual Studio提供了对通过Hyper-V运行Android模拟器的支持)。
- 安装Android Emulator软件包27.2.7或更高版本。要安装此软件包, 我们将在Visual Studio中导航至”工具”>” Android”>” Android SDK Manager”。选择”工具”选项卡, 并确保Android模拟器版本至少为27.2.7。另外, 请确保Android SDK工具版本为26.1.1或更高版本:
创建虚拟设备时(请参阅使用Android设备管理器管理虚拟设备), 请确保选择基于x86的系统映像。如果我们使用基于ARM的系统映像, 则虚拟设备将不会加速并且将运行缓慢。
HAXM加速
要确定我们的硬件是否支持HAXM, 我们必须执行以下步骤:我的处理器是否支持英特尔虚拟化技术?如果设备支持HAXM, 则可以使用以下命令检查HAXM是否已安装:
1.打开命令提示符窗口, 然后输入以下命令:
cmd
sc query intelhaxm
2.我们将检查输出以查看HAXM进程是否正在运行。如果是这样, 我们应该看到输出清单intelhaxm状态为RUNNING。例如:
1.如果STATE未设置为RUNNING, 则未安装HAXM。
如果计算机支持HAXM, 但未安装HAXM, 则将在下一部分中使用以下步骤安装HAXM。
安装HAXM
HAXM将安装Windows软件包, 这些软件包可从”英特尔硬件加速执行管理器”页面获得。要下载并安装HAXM, 我们使用以下步骤:
- 从Windows的intel网站, 我们下载了最新的HAXM虚拟化引擎安装程序。直接从英特尔网站下载HAXM安装程序的好处是, 我们可以保证使用的是最新版本。
- 运行intelhaxm-android.exe以启动HAXM安装程序。在安装程序对话框中接受默认值:
创建虚拟磁盘时, 请确保选择基于x86的系统映像。如果我们使用基于ARM的系统映像, 则虚拟设备将不会加速并且将运行缓慢。
使用Android设备管理器管理虚拟设备
在这里, 我们将介绍如何使用Android设备管理器创建和配置Android虚拟设备。我们可以使用这些虚拟设备来运行和测试我们的应用程序, 而无需依赖于物理设备。
启用硬件加速后, 下一步就是使用Android设备管理器来创建虚拟设备, 我们可以使用这些虚拟设备来测试和调试该应用。
Windows上的Android设备管理器
在这里, 我们将说明如何使用Android设备管理器来创建, 自定义和启动Android虚拟设备。
我们使用Android设备管理器来创建和配置在Android模拟器中运行的Android虚拟设备(AVD)。每个AVD是仿真器的配置, 它可以模拟物理Android设备。
要求
要使用Android设备管理器, 我们需要以下各项:
- Visual Studio 2019社区, 专业和企业版。
- 或者, 我们可以使用Visual Studio 2017 15.8版或更高版本。支持Visual Studio社区, 企业版和专业版。
- Visual Studio工具用于Xamarin 4.9版。
- 必须安装Android SDK(使用此设置Xamarin.Android的Android SDK)。如果尚未安装Android SDK, 则必须确保将其安装在以下位置:C:\ Program Files(x86)\ Android \ android-SDK。
必须安装以下软件包(通过Android SDK Manager)
- Android SDK工具版本26.1.1或更高版本
- Android SDK平台工具27.0.1或更高版本
- Android SDK Build-Tools 27.0.3或更高版本
- Android Emulator 27.2.7或更高版本。
这些软件包应显示为已安装状态, 如以下屏幕快照所示:
启动设备管理器
我们将通过单击工具-> Android-> Android设备管理器, 从工具中启动Android设备管理器。
主屏幕
当我们启动Android设备管理器时, 它将显示一个屏幕, 其中显示了所有配置虚拟设备。对于每个虚拟设备, 将显示OS(Android版本), 名称, 内存大小, 处理器和屏幕分辨率。
当我们在列表中选择设备时, “开始”按钮将出现在右侧。我们可以单击开始按钮以使用该虚拟设备启动仿真器:
当模拟器以选定的虚拟设备启动时, “开始”按钮将变为”停止”, 我们可以使用它来停止模拟器。
新装置
要创建新设备, 请单击”新建”按钮
单击”新建”以启动”新设备”屏幕。
要在”新设备”屏幕中安排新设备, 请使用以下步骤:
1.在这里, 我们必须给设备起个名字。在此示例中, 将创建一个名为Android1的新设备。
2.通过单击基本设备, 然后单击菜单, 选择要仿真的物理设备。
3.现在, 我们将通过单击虚拟机菜单来选择虚拟设备的处理器类型。现在, 我们选择提供最佳性能的x86, 因为它可以实现硬件加速。 x86_64选项还利用了硬件加速, 但运行速度略慢于x86。
4.单击菜单中的OS, 选择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.添加我们需要显式设置的所有其他属性。 “新设备”屏幕仅显示最常修改的属性, 但是我们可以单击”添加属性”下拉菜单(位于底部)以添加其他属性:
我们还可以通过选择属性列表顶部的custom选项来定义一个定制属性。
8.单击创建按钮创建一个新设备。
9.我们可能会看到”许可证接受”屏幕。单击接受。
10. Android设备管理器将新设备添加到已安装虚拟设备的列表中, 同时在设备创建过程中显示”创建进度”指示符:
11.创建过程完成后, 带有”开始”按钮的已安装虚拟设备列表中将显示一个新设备。