Unity Android模拟器调试

发表于2015-09-18
评论0 2.41w浏览

Unity Android模拟器调试

Unity项目遇到了只会在Android上出现的问题,code review再三没有找到问题,只能想到动态调试了。Unity Android的真机调试只能使用Wi-Fi调试,它要求开发机和Android设备在同一子网下,具体步骤参考Unity的官方文档《Attaching MonoDevelop Debugger To An Anroid Device》。

由于办公环境的限制,我们的开发机(台式机)无法满足与Android设备在同一子网下的真机调试条件,因此我们探索了Unity项目在Android模拟器上的调试方法。

 

一、、创建AVD

安装Java和Android SDK是前提,这里不做细述。Android SDK中自带了eclipse,通过eclipse里的Android Virtual Device Manager可以很方便的创建和管理AVD。

创建AVD时除了Memory Options、Internal Storage和SD Card尽可能设置大一点防止发生apk安装失败等问题以外,还需要注意以下几点:

1、Windows上RAM设置超过768M时可能会发生模拟器启动失败,这种情况只需要改小RAM即可。

2、勾选Use Host GPU选项,否则运行项目时可能会崩溃,报错:[EGL] No suitable configuration found that matches the minimum critera

 

二、配置APN

通常情况下我们的模拟器需要可以联网,Android通过APN来实现设备与蜂窝移动网络的连接,这里需要通过配置APN来实现模拟器与宿主机网络的连接:

1、进入Settings->Wireless & networks->Mobile networks->Access Point Names,选择New APN。

2、Name随意填写,其它设置按下图填写。

3、打开模拟器中的浏览器访问外部web这时应该可以成功访问。

 

三、安装apk

生成apk时记得在Unity Build Settings中勾选Development Build和Script Debugging选项,这样的版本才能被调试。

通过adb install或者豌豆荚等工具安装apk。这里我们遇到了应用无法安装成功的问题,通过DDMS Logcat抓取日志发现返回错误码为-18,根据《Failure [INSTALL_FAILED_CONTAINER_ERROR]》我们将Unity Player Settings->Other Settings->Configuration中的Install Location由Prefer External改为Automatic后重新生成apk安装成功。

 

四、adb连接

运行模拟器时,模拟器窗口标题栏会显示模拟器的端口号和AVD名称,这个端口号是它的console端口号,其区间为5554-5584之间的偶数,而5555-5585之间的奇数则是对应的为adb保留的端口号。默认情况下运行第一个模拟器的console port为5554,adb port为5555,第二个模拟器的console port为5556,adb port为5557,依此类推。Console port和adb port用于下面的adb连接:

1、adb tcpip 5555将设备的adb daemon与宿主机的5555端口绑定。如果5555端口已经被占用,可以使用5555-5585之间其它的奇数。

默认情况下第一个模拟器的console port为5554,adb port为5555,因此可以跳过这步。

2、adb connect 127.0.0.1:5555这里通过网络进行adb连接,5555为上一步设置好的模拟器adb port,127.0.0.1为本机环路地址。因为模拟器的adb daemon与本机的5555端口进行了绑定,因此adb连接本机(127.0.0.1/localhost)的5555端口时就是连接了模拟器。

3、adb devices查看连接是否建立好。

 

五、Unity调试

运行项目后,MonoDevelopment或UnityVS的Attach窗口会出现AndroidPlayer一项,这就是我们模拟器上运行的项目了。但如果此时直接Attach会发现Attach不上,我们还需要做些配置工作。

仔细看AndroidPlayer这项会发现有unknown_sdk@10.0.2.15这样的标识,这个10.0.2.15实际上是模拟器自己定义并分配的IP,直接Attach会尝试去连接这个IP,当然无法连接到模拟器,也就无法调试项目了。好在UnityVS有两个很好的功能,一个是列出了调试项目时需要连接模拟器的端口号,即上图的56997,另一个是允许自定义输入IP和端口号来进行远程调试。

1、打开UnityVS的Attach Unity Debugger窗口,记住AndroidPlayer的端口号。

2、打开cmd,输入telnet localhost 5554来进入Android Console,5554即前面提到的模拟器的console port。

3、Android Console中输入redir add tcp:5590:56997,将模拟器56997端口重定向为宿主机的5590端口。这里的56997即第1步需要记住的端口号,5590可以设置为任意你想用的端口号。

4、在UnityVS Attach窗口点击“Input IP”,输入127.0.0.1:5590,点击“OK”将会连接到模拟器并Attach项目成功,接下来就可以体验“真机”调试了。

 

六、待优化

本文只是探索了Unity Android模拟器调试的可行性,但Android原生的模拟器确实性能不好,可以尝试使用其它的模拟器来代替。如有问题欢迎大家指正。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引