正巧最近需要开发一个安卓手机上的Unity3D游戏功能,想着既然要开发么,当然需要调试。本来的话一些基础功能是不需要使用仿真模拟器,直接在U3D的开发编辑器上就能调试,不过有一些安卓上才能执行,比如

AndroidJavaClass jc = new AndroidJavaClass("");

 这种代码如果直接在U3D的开发编辑器上调试,直接就会返回

因此,我们需要在实体机(安卓手机)或者模拟器上调试才能正常执行。

以下全都是我这台电脑的运行结果,并不代表其他电脑有同样的效果

我选择在模拟器上调试,因为使用实体机的话,据说只能使用WIFI,虽然USB调试也可以,不过查了下资料,发现问题挺多的,而WIFI的话速度就慢很多了。

在模拟器的选择上,我首先选择了,Android Virtual Device(以下简称AVD),在进行了各种配置以后,AVD模拟的安卓U3D应用确实正常运行了,不过AVD给安卓模拟器分配的网络是NAT网络,也就是说,安卓模拟器里面跑的IP是重新分配的虚拟IP,而如果我们用127.0.0.1来attach是没法子访问到模拟器内部端口,那么办法只有一个,使用redir指令来重定向,把模拟器分配给安卓应用的端口重新分配出来给PC访问,当然,这个方法本身是没啥问题的话,可问题是

这个端口,在你每次启动新的调试以后,都会变化,也就是说,你每次想要调试,都要重新redir一个新的端口才行,这个就蛋疼了啊

要解决这个问题,我们只能把NAT网络改成桥接网络才行,可惜我找遍AVD也找不到能够把网络连接方式改成桥接的设置,于是作罢,只能放弃AVD

后来,我把目光转向Visual Studio Emulator for Android,这是VS自带的安卓模拟器,基于Hyper-v虚拟机运行,在虚拟机的网络介质设置界面,可以把网络改成桥接模式,非常的Nice,可惜在我把我这边的项目导入模拟器运行的时候,不管怎么办,模拟器一定会崩溃,所以这个办法至少在我的电脑上只能作罢,也许你们项目可以用这个办法。

之后我就把目光转向国内的安卓模拟器,比如夜神啊,雷电啊之类的,可惜的是,这些安卓模拟器的桥接模式,都不支持Win10系统,至于要我换系统?不存在的。

之后么,使用了据说是最好的安卓模拟器Geometry ,确实不错,而且也确实支持修改网络连接方式为桥接,可惜不知道为啥,还是跟上面那个一样,无法运行我这边的项目,这次倒不是崩溃,而是应用打开全是空白...没办法,只能作罢,不过这个方法在你们的项目上也应该能用。

最后,一气之下使用了VirtualBox才最终解决问题,下面就是本文的正题,关于如何在Visual Studio上仿真调试安卓的U3D应用。

在开始之前,需要做一些准备功能

1.下载安卓的x86系统文件,可以是安装包,也可以去(https://www.osboxes.org/android-x86)下载别人做好的成品虚拟机硬盘,推荐后者,可以少折腾,不过这里提供的下载包需要从谷歌硬盘上拖下来,所以,是吧。

2.下载虚拟机,这个没啥好说的话,我用的是Oracle VM VirtualBox,随便百度下就有下载地址

3.安装好安卓的SDK包,我使用的是VS安装器提供的,也可以用就是了

4.如果使用的是VS,需要在VS上面安装Unity3D的拓展文件

上面最主要的功能做好以后,我们先打开虚拟机配置下

其实也没啥好说的,把系统设置为Liunx项目,硬盘指向下载来的vdi文件

然后右键项目-属性,在网络选项卡,把连接方式改成桥接网卡,然后启动虚拟机就行

正常启动项目以后,按照一般安卓系统的操作方式,记下IP,然后打开命令行控制器

在adb.exe的所在目录,键入

adb connect IP

如果出现connected to IP,就代表本地机器和模拟器连接成功,现在就可以CMD了

接下来,把虚拟机晾一边(可以的话,设置一下让安卓系统永不休眠,不然过一会儿不操作,进入休眠模式不好唤醒,只能重启)

打开Unity3D编辑器,设置下配置

上述框红的,都是需要设置的,编辑器我使用VS,当然你们也可以用Monodevelop,编辑附加需要勾上,SDK和JDK需要手动指定位置,设置完毕后就可以关了

在Build设置界面,双击Android,然后把红框的都勾上,最后点击Build And Run

会出现一个让你保存apk文件的地址选择框,请务必保证保存APK文件的路径上面没有出现中文,出现中文文字会导致APK无法安装到安装模拟器上.

如果上述工作没有做错,点击保存后,就会进入漫长的连接安卓设备,构建应用,以及发送应用包给安卓模拟器并自动安装运行等操作

如果一切正常,你就会发现,安卓模拟器已经把应用运行起来,等待你操作了,

现在,让我们启动VS

随便在哪个指令上下断点(不下断点调试的时候断不下来)

如果VS安装了U3D的拓展组件,这里就应该有这个选项

然后你会发现,模拟器里面运行的应用,以及在这里显示了,不用想,双击点开就是

如果上述操作都没问题,你会发现,VS直接进入了调试模式

如果出现

这种非调试模式,就是连接不成功

然后我们随便在应用上面做一些我们预定要调试的操作

看VS已经正常的断下来了,并且在自动窗口,把当前的指令变量都展示出来,这样子调试就方便多了。

关于如何在Visual Studio上仿真调试安卓的U3D应用的更多相关文章

  1. 如何在 Visual Studio 2013 中调试.NET Framework 4.5.1 代码

    版本需求如标题,在 工具->选项->调试->常规 中,更改以下设置: 禁用:启用“仅我的代码”.逐过程执行属性和运算符(仅限托管).要求源文件与原始版本完全匹配 启用:启用 .NET ...

  2. [译]如何在visual studio中调试Javascript

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  3. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

  4. Mac上使用Visual Studio Code开发/调试.NET Core代码

    Mac上使用Visual Studio Code开发/调试.NET Core代码 .Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今 ...

  5. 如何用Visual Studio Code远程调试运行在服务器上的nodejs应用

    假设我有一个nodejs应用,运行在AWS - 亚马逊云平台上(Amazone Web Service).我想用本地的Visual Studio Code来远程调试服务器端的nodejs应用. Vis ...

  6. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  7. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  8. 在Visual Studio上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

  9. [转]如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    本文转自:http://www.cnblogs.com/stg609/p/3673782.html 开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framew ...

随机推荐

  1. python中的多线程和多进程编程

    注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...

  2. 【转】web.xml中的contextConfigLocation在spring中的作用

    一.spring中如何使用多个xml配置文件 1.在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个参数,sp ...

  3. 【easy】479. Largest Palindrome Product

    Find the largest palindrome made from the product of two n-digit numbers Since the result could be v ...

  4. mysql5.7版本开始创建用户需要create user

    mysql5.7版本开始创建用户需要create user 5.7版本之后,直接使用:grant select on MySQL.test01 to hug@localhost; 是不行的,会报错: ...

  5. css 自制一些小特效

    Github地址 位于gh-pages分支上 https://github.com/a1115040996/MyHTML/ 3D 卡片特效 地址: https://a1115040996.github ...

  6. 2018-2019-2 网络对抗技术 20165328 Exp1 PC平台逆向破解

    实验目的: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getSh ...

  7. python第一周总结

    这一周将开启学习python第一周,开始之前学过python但是没有学精,到现在基本快忘记了,只能记住大概什么样子了emmm 作业计算bmi 这周作业为计算bmi,小明身高1.75,体重80.5.请根 ...

  8. Git 的使用(皮毛))

    1.安装git 软件(下一步直到完成) 2.码云注册(保存代码) 3.创建代码托管仓库 4.创建文件夹 5.写东西并提交到码云 1.在某个文件夹下写东西 2.写完之后在此文件夹下鼠标右键,并选择[gi ...

  9. libraries\include\boost-1_61\boost/regex/v4/perl_matcher.hpp(362): error C2292: 'boost::re_detail_106100::perl_matcher<const char *,std::allocator<boost::sub_match<const char *>>,boost::regex_traits<c

    这个问题在Windows上基于CMake编译Caffe-SSD的GPU版时出现. 网上找到的博客贴出的解决办法是删掉regex和rv相关代码,甚至不编译detection_output_layer.c ...

  10. Redis实战 - 3.Hash

    hash Redis的Hash有点像一个对象(object),一个Hash里面可以存多个Key-Value对作为它的field,所以它通常可以用来表示对象. Hash里面能存放的值也能作为String ...