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即可。

二、配置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原生的模拟器确实性能不好,可以尝试使用其它的模拟器来代替。如有问题欢迎大家指正。

android模拟器动态调试,Unity Android模拟器调试相关推荐

  1. android 如何动态设置margin,Android 动态设置margin

    android的view中有setPadding,但是没有直接的setMargin方法.如果要在代码中设置该怎么做呢? 可以通过设置view里面的LayoutParams 设置,而这个LayoutPa ...

  2. android progressbar动态,如何在android中动态启动和完成progressBar

    当我从第一个活动类跳过第二个活动类时,我将在第二个活动中开始对某个图像进行图像处理,然后直到新图像进入屏幕我才开始进度条,然后在新图像到达屏幕时结束.我怎样才能做到这一点 ? 解决方法: 使用Prog ...

  3. android sqlite动态创建表,Android 解决sqlite无法创建新表的问题

    使用SQLite时,继承SQLiteOpenHelper, onCreate方法只有在第一次创建数据库的时候才会被调用, 因此,重新更改或者添加表时,需要在DDMS里面删掉原来的.db文件,重新运行, ...

  4. android relativelayout动态添加视图,android RelativeLayout 动态添加子View

    在很多时候xml里面的布局并不能满足我们的需求.这时候就需要用代码进行动态布局,前些天在对RelativeLayout 进行动态布局时遇到了些问题,现在解决了,分享下. 我现在在RelativeLay ...

  5. vs使用android真机调试,UnityVS真机调试Android APP

    UnityVS真机调试Android APP 前提:完成UnityVS环境搭建.Unity Android环境搭建.Unity Android打包 步骤: 1. USB线连接手机和电脑,在手机的开发者 ...

  6. Unity3d android 通信之 unity3d读取android SD卡文件

    此篇博文解决的问题是: 1.unity3d如何访问android SD卡的文件 2.如果把android端代码以jar包形式由unity3d调用 闲话不多说,现在咱们进入正题. 一.unity3d如何 ...

  7. 【Android开发】在Android Studio上关联使用第三方模拟器(MuMu模拟器)调试方法

    Android Studio自带的模拟器不用我说了吧,卡出翔,那么如何换成其他模拟器呢?不多说,方法如下: 一.找到自己SDK的安装目录 比如我的SDK是安装在:D:\53-AndroidStudio ...

  8. android 黑马 模拟器,HBuilder调试夜神安卓模拟器方法

    HBuilder调试夜神安卓模拟器方法 现在开发手机app的IDE很多,今天我就以我个人开发使用的HBuider开发工具讲一下手机app开发调试.HBuider支持真机调试,这个比较简单,只要安装好手 ...

  9. Windows 10 安装 Android Studio 安装 创建APP 创建模拟器调试 真机调试 编译 签名打包APP

    要想使用Android Studio开发android APP,需要安装三个工具:JDK.Android Studio.Android SDK 先了解这三个工具是做什么的 JDK:JDK是Java语言 ...

  10. Android IDA 动态调试最完善攻略,跨过各种坑

    From:https://www.pianshen.com/article/3409449384/ IDA 静态分析 与 动态分析:https://zhuanlan.zhihu.com/p/38983 ...

最新文章

  1. VC++代码转换为QT代码问题总结
  2. 灰度重心法原理与实现
  3. Elasticsearch索引(company)_Centos下CURL增删改
  4. API接口通讯参数规范
  5. vue前端上传文件夹的插件_基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件...
  6. 边锋游戏:用精细化运营使游戏流失率降低 26% ,只是数据驱动价值的冰山一角...
  7. 运维记录 - 业务日志清理功能
  8. SAP CRM,C4C和Hybris的product Cockpit
  9. python pip本地安装包_python-pip install 安装包
  10. android获取年月日时分秒毫秒,Android获取两个日期其间间隔的天数
  11. [转] CPU GPU TPU
  12. python测试抽奖脚本_B站动态转发抽奖脚本+教程
  13. matlab legend分栏,word排版技巧
  14. win10系统更新时一直停留在重新启动界面的解决方法
  15. js 获取浏览器经纬度精确到100米(chrome,firefox等大浏览器,ios,安卓亲测可用)
  16. 数据格式化 string.format()
  17. 用计算机做图画ppt,用计算机画图课件.ppt
  18. STM32+ESP8266+MQTT连接阿里云服务器(四、STM32连接阿里云平台)
  19. 每个程序员都应该了解的内存知识(2)-CPU caches
  20. 成人c语言培训,C语言程序设计在成人教育中教学.doc

热门文章

  1. NAS媒体库资源归集整理工具nas-tools
  2. C#从sqlite3中读数据到DataTable中报错 :System.Data.ConstraintException:“未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
  3. windows批量ping测试脚本
  4. 1055 集体照 (25分)
  5. [数值计算-11]:多元函数求最小值 - 偏导数与梯度下降法Python法代码示例
  6. (总结)Web性能压力测试工具之Siege详解
  7. PDMS二次开发(十三)——Pipeline Tool升级到E3D版本
  8. 【数理统计】一题了解假设检验
  9. 计算机组成原理平均cpi怎么算_计算机组成原理-计算机的性能指标及计算题
  10. 第五篇 应用Java