使用Visual C++ 跨平台移动技术调试JNI Android 应用程序

[原文发表地址] Debug JNI Android Applications using Visual C++ Cross-Platform Mobile

[原文发表时间] 2014/12/12  4:22PM

之前我们已经介绍了,开发人员能够在Visual Studio 2015 preview(在这里下载)中使用Visual C++创建跨平台移动应用程序。特别是对于Android平台而言,这项功能的引入使得开发人员能够创建Native-Activity 应用程序,涵盖一系列功能的动态和静态的本地应用程序,提供快速,精确,以及平滑的编辑-〉编译-〉调试开发迭代循环。本博客着重给出如何使用Visual Studio调试器去调试预编译好的,甚至是那些未曾在Visual Studio中编译过的本地android应用程序(Native Activity 和 JNI)。

调试预编译的JNI代码

为了证明这个,我们从一个预编译的JNI应用程序包文件开始。为此,本博客中我们将使用Native-Audio Android应用程序,它是Android本地开发套件(NDK)的一部分(在这里下载)。如果需要,应用程序的预编译版本和源文件已作为本博客的一部分附上。在这种情况下,这个APK文件已经由作为Android SDK Bundle一部分的 Eclipse Android集成环境编译。另外,还需注意,无论你用什么工具来编写本地代码(gcc或clang),只要你能生成APK调试信息(NDK_DEBUG=1和
manifest中的android:debuggable=”true”)。就上面说的,让我们开始吧!

为了调试这个预编译的JNI Android应用程序,我们需要创建一个dummy工程,这个工程允许我们利用VS的部署引擎对预编译的APK部署并开始调试。对于这个Dummy工程,我们使用动态共享库 (Android) 模板建立。

当一个简单的动态共享库(Android)工程创建后,‘配置属性’下的调试属性页就会自动配置(如下图所示)。

用户需要填写以下信息:

  • 要启动的包: 包含.apk名字的.apk文件的路径(例如:C:\DebugAPK\NativeAudio.apk)
  • 包名: Android 应用程序的Java包的名字,这个信息可以在‘androidmanifest.xml’文件中找到。(例如:com.example.nativeaudio )。 更多信息请看以下例子的配置。
  • 启动活动: 启动活动的名字,这个信息可以在‘androidmanifest.xml’文件中找到。(例如:NativeAudio)

启动的活动(如:NativeAudio)和包名(com.example.nativeaudio)都可以从AndroidManifest.xml(如下图)获得,并作为NativeAudio NDK的一部分。

 

如果不能访问AndroidManifest.xml,可以通过另外一种方法在预编译的.apk文件使用aapt工具获得详细信息。Aapt可以在android-sdk中找到,构建工具目录并执行以下命令将在aapt中得到一个包含包值和活动名的xml树的结果。

aapt dump --values xmltree NativeAudio.apk AndroidManifest.xml

我们现在在调试属性页面中设置manifest详细信息并开始调试本地程序代码。在之后发布的版本中我们计划把这一过程自动化,用户无需在调试属性页面中填写这些信息。而且请注意目前我们只支持源代码本地部分的调试。为了开始调试我们需要在配置管理器中设置一些属性。

 

在配置管理器中进行配置,取消编译项目属性,选择部署属性。一旦选择了部署属性,按F5,之前编译好的.apk将会部署在Device/Emulator上,我们就可以模仿调试了。

 

最后我们需要做的是在VS中打开需要调试的代码,设置断点开始调试。利用‘添加-〉已有项目’对话框载入代码到你的项目中,并按F5进行调试。

总结

本博客应该让您了解了如何使用Visual Studio调试预编译好的android应用程序包的一些知识。根据您的反馈,我们将在本博客上更新更深层次的关键功能。如果您希望和我们讨论一些特别的话题,请让我们知道。提醒下,发布这个Preview版本的目的是收集大家反馈并向大家学习。我们正在考虑将来也支持其他平台,您的反馈对塑造我们的产品的方向是至关重要的。

分享反馈是很容易的!功能的建议请写到用户之声,提交发现的缺陷请到我们的网站连接或者在IDE中发送表情笑脸或者皱眉给我们。您也可以在下面评论。另外,如果您想直接和我们这个主题的产品团队对话,请发邮件到(aasthan@microsoft.com)。我们很希望从您那得到更多并和您建立联系。