Native-Activity (安卓) 应用开发

[原文发表地址]Developing Native-Activity (Android) applications

[原文发表时间]2014/12/5  8:05AM

概述

Visual Studio 2015 预览版(从这里下载)增加了一种功能,作为跨平台移动开发的一部分,即开发人员可以创建安卓Native Activity应用。安卓跨平台中的安卓Native Activity (API 级别为 9)增加了创建纯粹的C/C++应用的功能。同时在后台还有一些隐藏的Java JNI代码,这些设计是为了抽象细节信息,并让细节信息远离开发者。Native Activity应用很受游戏(例如虚幻4)以及图形密集型(OpenGL)应用的欢迎。这篇博文将引导您体验创建一个Native Activity应用,并经历以下开发周期,包括编辑、编译、调试Native Activity代码。当你完成Visual Studio的这个体验的后,我们欢迎您的想法及任何反馈。

入门指南

在开始创建Native Activity应用之前,请先掌握这个体验所需要的跨平台移动工具。如果你还没有掌握请参考这篇博文,它可以帮你获得经验。掌握这个工具后,让我们开始创建OOTB Native-Activity 应用,从‘Visual C++ - Cross Platform’ 节点下选择一个可用的Native Activity 应用模板。

Native-Activity 解决方案

探究创建的这个模板让我们从解决方案的结构开始。从下面的图中可以看到 ‘HelloNativeActivity’ 方案有 ‘HelloNativeActivity.NativeActivity’‘HelloNativeActivity.Packaging’ 两个工程。NativeActivity工程用来封装这个方案中的所有具体的C/C++代码。

通过NativeActivity 工程的属性页面,用户可以设置工程的属性例如指定安卓API的级别、库的名称以及平台的工具集。请注意作为我们的跨平台移动启用的一部分,当指定安卓平台时我们已经提供了GLANG工具链(通过本机开发工具包(NDK) 使它可用)支持。这些支持包括增加了在属性页面简单提供‘代码生成’的编译器编译标志、‘优化’、以及”预编译头文件”的使用。

再看一下NativeActivity.Packaging 工程,它是HelloNativeActivity方案的第二个工程,通过调用Ant编译系统来绑定动态共享库并创建一个完整的安卓应(.apk)。因为这是一个NativeActivity方案,所以这个工程没有包含任何 Java代码但是作为Ant编译调用的一部分它可以很好的用来编译Java代码。同时请注意除此之外其它的文件的详细信息,例如安卓Manifest文件(AndroidManifest.xml),这个工程中也包含Ant 编译(build.xml)。

编辑-〉编译-〉调试周期

为了加快编辑-编译-调试周期,因此设计了跨平台移动体验。作为这个体验的一部分,针对安卓平台时,Clang工具链中增加了全面支持智能感应功能。这个是除了其它普通代码创建功能如重构,快速导航等功能外新加的功能。下图描述了在写代码时的不同功能。

接下来我们一起看一下NativeActivity应用的源文件。我们先看main.cpp源文件, ‘android_main’ 功能就是任意native-activity应用的入口函数功能,以及运行事件轮询来接收输入事件以及实现其它功能。我们来编辑这个源文件,在特定的调试目标(模拟器/设备)添加以下代码段并运行,记录传感器的数量。你可以把下面这段代码添加在‘if (state->savedState != NULL)’ 条件判断开始之前。

 

 ASensorList sensorList;
 
 int counter = 0;
 
 int numSensorsDiscovered = ASensorManager_getSensorList(engine.sensorManager, &sensorList);
 
 if ((sensorList != NULL) && (numSensorsDiscovered !=0))) {
 
 LOGI("%d sensors were discovered on this device", numSensorsDiscovered);
 
 } 

这段代码有一个bug提示的是已经编译完的代码,这个提示是利用众所周知的Clang的修复及其它编译功能来提供诊断支持(如下图所示)。在这中特殊情况下,我们所添加的那段代码在上面强调的那一行有一个多余的括号,删掉多余的括号,程序就会编译成功。

最后,在新添加的这段代码设置一个断点,我们来试着调试一下这个程序。基于快速的Microsoft X86模拟器已经启动,而且运行调试目标已经设置成开始调试。按F5键,可以看到程序运行在调试断点停止,调试功能例如自动窗口、局部变量窗口以及其它功能如监视窗口、表达式求值、以及在调试模式下用进入、跳出所有文件来遍历源文件,以及下图所描述的其它功能。

结语

这篇博文讲了怎样使用Visual Studio来创建安卓Native-Activity应用。而且它应该可以帮助你们了解我们为精简编辑-编译-调试周期而增加的功能。我们会继续跟进这个博文,用其它的博文介绍更深入的关键功能。这是一个预览版本,对于任何预览版我们的目标是收集反馈,并向你们学习。我们正在考虑将来也支持其它平台,您的反馈是对塑造我们产品的方向是至关重要的。

分享反馈很简单!在用户之声上提出功能建议,在联系网站记录你们发现的bug,在IDE里面发给我们一个笑脸或者皱一个眉头。你们也可以在下面留下意见。除此之外,如果你正在寻找我们的产品团队直接讨论这个问题,请给我们发邮件(aasthan@microsoft.com). 我们很高兴听到你的建议并与你联系。