这个问题最近两个月才发现,可能是VS不兼容谷歌最新发布的Android SDK中的系统镜像或者ADB造成的。 深入研究发现是VS2015的libadb模块没处理好与AVD安卓虚拟机设备进程的telnet协议通讯。 libadb认为请求返回的都是直接的明文结果而不包含其他的控制字符命令的字符串文本。结果却刚好相反,包含了那些控制文本插入符滚动及插入碎片文字的命令。详情请翻阅telnet协议,参考程序是ReactOS中的telnet程序实现,这个实现是正确的,处理好了这些命令。 所以我们修复之,返回给libadb简单直接的明文文本。 修复方法见源代码,涉及到私有库中的几个函数请自己实现。 使用方法: 第一步,将下载的附件中的msimg32.dll放在X:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE目录下面重启VS2015即可。 第二步,将C:\Users\你的用户名\.emulator_console_auth_token这个文件的内容清空后保存。没有这个文件就自己新建一个。这的文件包含一串符号内容也是导致VS找不到AVD的原因之一,必须清空。 也不知道VS2017何时发布正式版。正式版不知道会不会注意并修复这个问题。先自己解决了。 AVD调试速度比用手机快多了,第三方的安卓虚拟机大多是为游戏而开发不适合开发调试,微软的安卓虚拟机OpenGL ES很多函数没实现好,调试游戏会报错并崩溃,且依赖Hyper-V,开了Hyper-V笔记本就无法睿频了硬伤,现在x86的AVD已经运行很快了,所以我选择了尝试用AVD去做开发调试。20161207:改进了不再会每隔5秒就启动adb进程来获取最新的AVD设备列表了,现在是通过网络通信的方式来获取。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)