在 Visual Studio 中使用C++的Android 和 iOS开发

[原文发表地址] Android and iOS development with C++ in Visual Studio
[原文作者] RongLu (MSFT)
[原文发表时间] 2017/4/18

当涉及到移动应用程序的构建,很多的开发者使用C++编写大部分或部分的应用程序。为什么呢?那些正在构建计算密集型应用程序(如游戏和物理模拟器)的人们由于其无与伦比的性能而选择C++,而其它选择C++的人们是因为它的跨平台性质和能够利用其移动应用程序中现有的C/C++的库。无论你是针对通用的Windows平台(UWP), Android或者 iOS,Visula Studio 都可以在一个单个的IDE中构建具有完整编辑和调试功能的跨平台的C++移动应用程序。

在这篇博客中,我们将重点介绍如何在Visual Studio 中使用C++构建Android和iOS 应用程序。首先我们看一看如何获取Android和iOS 开发工具,然后使用内置模板创建一些C++移动应用程序,接下来,我们将使用Visual Studio IDE编写C++和java 代码,然后我们将使用世界级的Visual Studio 调试器来捕获C++和java代码中的问题,最后我们将讨论如何将C++移动解决方案和Xamarin结合使用。

安装Android和 iOS开发的Visual Studio

首先下载Visual Studio 2017 并且启动Visual 安装程序。

构建Android或者 iOS 应用程序,在移动和游戏类别下选择C++移动开发工作负载。 1-vs-install

Android 开发:在默认情况下,此工作负载包括核心Visual Studio 编辑器,C++调试器,GCC和Clang编译器,Android SDK和 NDK, Android 构建工具,Java SDK 和 C++ Android 开发工具。如果你没有Android测试设备,你可以在可选择组建列表中安装Google Android 仿真器,这应该给你提供了在你开始构建Android应用程序所需的一切。

iOS 开发:如果你还要面向iOS, 在“可选组件”列表中选择”C++ iOS 开发工具“,将对你有好处。

使用项目模板创建一个新的Android应用程序

如果你打算首先针对Android并且不确定之后的其他平台的话,VS内置的Android项目模板(包括Native-Activity应用程序,静态库,动态共享库)应该是一个很好的出发点,如果您希望采用跨平台解决方案来定位多个移动平台,请转到下一节,在Android和iOS上构建OpenGLES应用程序,我们将在此讨论构建使用共享C ++代码针对两个平台的应用程序。

你可以在Visual C++ -> 跨平台-> Android 节点下找到Android 模板。 2-templates

在这里我们将创建一个新的Native-Activity应用程序(Android),它在创建游戏和图形密集型应用程序方面很流行,创建项目后,在解决方案平台下拉列表中,选择匹配的Android模拟器或者你正在使用的设备的正确架构,然后按F5运行应用程序。 3-solution-platforms

默认情况下,Visual Studio使用Clang工具链来编译Android。应用程序应该可以构建并且运行成功了,你应该可以在后台看到应用程序颜色的改变, 这篇文章 “创建一个Native-Activity应用程序”更详细地讨论了Native-Activity项目。

在Android和iOS 上构建OpenGLES应用程序

Visual C++ ->跨平台节点下的OpenGLES应用程序项目模板是面向Android和iOS的移动应用程序的良好起点。OpenGLES(用于内嵌系统或GLES的OpenGL)是许多移动设备支持的2D和3D图形API。此模板创建了一个简单的iOS应用程序和AndroidNative-Activity应用程序,它具有常用的C++代码,它使用OpenGLES在每个平台上显示相同的动画旋转立方体。 4-opengles-template

创建的OpenGLES应用程序解决方案在Libraries文件夹中包括三个库项目,每个平台一个,一个是共享C++ 代码,另外两个应用程序分别是Android和iOS项目。 5-solution-explorer

现在让我们在Android和iOS上运行这个程序

在Android上构建并且运行应用程序

该模板创建的解决方案将Android应用程序设置为默认项目,就像我们先前讨论过的运行Android Native-Activity应用程序一样。在解决方案平台下拉列表中,选择匹配的Android模拟器或者你正在使用的设备的正确架构,然后按F5运行应用程序。OpenGLES应用程序应该能成功建立并且运行,你将看到一个彩色的3D旋转立方体。

在iOS上构建并且运行应用程序

解决方案中创建的iOS项目可以在Visual Studio 中编辑。但是由于许可限制,必须从Mac构建和部署该项目。Visual Studio与在Mac上运行的远程带进行通信传输项目文件并执行构建,部署和调试命令。你可以通过以下说明安装Mac,使用iOS安装和部署工具来构建

一旦远程代理在Mac上运行并且Visual Studio与之配对,我们就可以构建并且运行iOS应用程序。在Visual Studio的“解决方案平台”下拉列表中,为iOS模拟器(x86)或iOS 设备选择正确的架构。在解决方案管理器中打开OpenGLESApp1.iOS项目的上下文菜单并且选择构建,然后再工具栏上选额iOS 模拟器,在Mac上的iOS 模拟器 中运行应用程序。你应该在iOS模拟器中看到相同颜色的3D 旋转立方体。 6-ios-simulator

这篇文章 在Android 和 iOS上构建OpenGLES应用程序 包括有关OpenGLES项目的详细信息。

Visual Studio面向所有移动平台

如果你正在构建面向多种移动平台的的应用程序(Android,iOS,UWP)并且希望共享C++通用代码,则可以通过拥有一个Visual Studio解决方案,并且在相同的IDE中利用相同的代码编辑和调试体验实现此目的。使用Visual Studio, 你可以通过共享项目组件轻松的共享和重用现有的C++库来面向多平台,下面的截图展示了一个包含4个项目的解决方案,每一个移动平台附加一个C++代码共享的项目。 7-shared-project

了解更多信息,请参阅流行手机游戏“水果忍者”和”Jetpack Joyride”的制造商Half brick 如何使用Visual Studio对c++跨平台移动开发经验

使用Visual Studio IDE强大功能编写跨平台C ++代码

使用Visual Studio,您可以使用相同强大的智能感知和代码导航功能编写跨平台C++代码,从而使代码编写更加高效。 这些编辑功能不仅在通用代码中亮起,而且在编写特定于平台的代码时,可以对目标平台进行上下文感知。

成员列表快速信息, 如下面截图图所示,只是Visual Studio提供的智能感知功能的两个示例。 成员列表显示类型或命名空间中有效成员的列表。 在C ++代码中的对象实例之后键入“ - >”将显示成员列表,您可以通过按TAB或键入空格或句点将所选成员插入到代码中。 快速信息显示代码中任何标识符的完整声明。智能感知是在面向Android平台的基础上实现的。 在下面的屏幕截图中,当Android Native-Activity项目处于活动状态时,Visual Studio会显示可用的Android特定功能的列表。 8-editing

在代码书写和编辑中,自动补全,曲线,引用突出显示,语法色彩化,代码片段化是有极大帮助的一些的生产力功能。

浏览大型代码库并在多个代码文件之间跳转可能是一个累赘的任务。 Visual Studio提供了许多伟大的代码导航功能,包括转到定义转到行 /符号/成员/类型查找所有引用,查看调用层次结构,对象浏览器等等,以提高您的生产率。

速览定义功能,如下面的屏幕截图所示,将定义带到到当前的代码文件,允许查看和编辑代码,而不需要切换您正在编写的代码。 您可以通过右键单击或快捷方式Alt + F12打开上下文菜单,找到要查看的方法的定义。 在屏幕截图的示例中,Visual Studio将Android SDK log.h文件中定义的__android_log_print方法显示到当前cpp文件中的嵌入式窗口,从而更有效地阅读和编写Android代码。 9-peek-definition

用世界一流的Visual Studio调试器调试C ++代码

代码中的故障排除问题可能很耗时。 使用Visual Studio调试器可以更快地找到和解决问题。 在Android C ++代码中设置断点,然后按F5启动调试器。 当断点被击中时,您可以在自动和监视窗口以及鼠标悬停的数据提示中观察变量和复杂表达式的值,在堆栈窗口中查看调用堆栈,并且跳入和跳出函数很容易。 在下面的截图示例中,自动窗口显示了在Android 传感器管理器和加速度传感器类型中更改的值。 10-debugging

Visual Studio中的Android调试体验支持通过其他IDE调试预构建的Android应用程序,其他基本调试器功能(跟踪点,条件断点)以及未来的功能例如调试器可视化(Natvis支持),同样也可以附加到正在运行的Android 应用程序上。

你可以在本篇博客中C ++调试和诊断找到更多有关通过C++调试器的内容

Java调试和Android的语言支持

无论您是在Android应用程序中编写Java或C ++代码,Visual Studio都将其覆盖。 Visual Studio包括一个Java调试器,可以在Android项目中调试Java源文件,并使用Visual Studio Java语言服务进行Android扩展,同时也可以在Java文件中使用Visual Studio IDE智能感知和浏览功能。

Java 代码编辑

首先,安装适用于Android扩展的Visual Studio Java语言服务。 它在Java文件中提供了色彩化(语法和语义),错误和警告以及代码概述和语义突出显示。 您还将获得智能感知帮助,例如成员列表,参数帮助,快速信息,使编写Java代码更有效率。 在下面的截图中,Visual Studio提供了android.util.Log类的成员列表。 11-java-editing

对于更大的代码库或对于你的源代码可以导航在第三方库的另一个方便的功能是转到定义(F12),在可用的条件下它将带您到符号定义的位置。

调试java 代码

在下一个调试会话的Android项目中启用Java调试,在“调试目标”工具栏中,将“调试类型”下拉列表更改为“仅限Java”,如以下屏幕截图所示。 12-java-setting

现在你可以设置行断点,断点包含条件或者命中次数,在Java代码的任何地方。当断点被命中,你可以在局部和自动窗口中查看变量,在堆栈窗口中查看堆栈,在logcat窗口中查看日志输出。 13-java-debugging

博客Visual Studio下的Android Java调试和语言支持有更多关于这一话题的详细信息。

构建Xamarin Android Native应用程序 Xamarin是一种流行的跨平台解决方案,使用C#语言跨移动平台创建丰富的本机应用程序,同时最大限度地提高代码重用性。 使用Xamarin,您可以使用本地用户接口创建应用程序,并在每个移动平台上获得本机性能。 如果您想利用Xamarin在C#中编写用户接口,同时重新使用现有的C / C ++库,Visual Studio完全支持构建和调试引用C ++代码的Xamarin Android应用程序。 这篇博客开发Xamarin Android Native应用程序有更详细地描述。

在Xamarin iOS应用程序中引用C ++库的实现可以阅读博客:从Xamarin代码调用C / C ++库

在Visual Studio 2017使用C++尝试进行移动开发

下载Visual Studio 2017,尝试去做并分享您的反馈。相关问题,请通过VS标题栏右上角的“反馈问题”选项。并在开发者社区门户跟踪您的反馈。相关建议,请通过UserVoice通知我们。