Android模拟器挂载虚拟串口进行通信之踩坑记

参考文章:https://blog.csdn.net/WarweeSZip/article/details/72956218

0 前言

最近刚接触串口通信,在学习Android串口编程,然后在一篇博客中看到可以在模拟器上挂载串口进行通信,嗯?还有这种操作,好6啊!鉴于设备还未到位,于是就动手撸起来,测试下写的串口通信的代码,于是就有了这篇踩坑记,以便以后忘记了能查阅,如果能给其他小伙伴带来一点帮助那是再好不过了。虽然很多原理还没搞懂,但好歹在踩了各种坑之后终于能够成功通信了。

还是菜鸟一枚,很多原理不懂,因此有些言论可能不准确,所以仅供参考,若有错误望指出,谢谢啦~

1 准备

依照上篇博客的指引,需要准备以下工具:

1)虚拟串口工具

下载虚拟串口工具,可以下载参考文章中提供的链接,也可以直接百度搜索下载
安装并运行工具,并添加一对串口
Android模拟器挂载虚拟串口进行通信之踩坑记_第1张图片

2)串口调试工具

下载串口调试工具,百度一搜一大把,我使用的是这个:https://www.ttrar.com/html/158809.html
直接运行exe就可以打开窗口,分别打开两个窗口去打开串口,测试两个串口之间的通信
Android模拟器挂载虚拟串口进行通信之踩坑记_第2张图片

2 动手

这个流程是本人亲测有效的,但不排除在其他人手里会出现问题。就像我最开始也是照着他人的博客撸的,但人家就是成功的到我这儿就不行了,我也很绝望的ε=(´ο`*)))

1)准备模拟器

准备Android 4.4版本的模拟器,下载的是x86且不带Google APIs的system image
Android模拟器挂载虚拟串口进行通信之踩坑记_第3张图片

2)挂载串口

如果要挂载的模拟器和串口是打开的,则需要关闭才能挂载成功
打开cmd,进入AndroidSDK的目录下的tools目录,执行以下命令

emulator -avd Pixel_3a_XL_API_19 -writable-system -qemu -serial COM1

将其中的模拟器和串口的名称替换为自己的就好了,我这里是将COM1挂载到Pixel_3a_XL_API_19的模拟器上
没问题的情况下就能启动模拟器了,端口设置保持默认的就好了,点击确定就OK了
Android模拟器挂载虚拟串口进行通信之踩坑记_第4张图片

3)运行Demo

从https://github.com/kongqw/AndroidSerialPort下载一个别人写好的项目,运行起来,查看效果。
Android模拟器挂载虚拟串口进行通信之踩坑记_第5张图片
检测出4个地址,发现只有ttyS0和ttyS1能打开,ttyS1能和COM2成功通信,ttyS0不行。看网上的说法,貌似都不一样,不知道原理是啥(•_•)?
Android模拟器挂载虚拟串口进行通信之踩坑记_第6张图片

3 踩坑

看步骤貌似挺简单的,但由于在下知识匮乏,实施起来各种坑ε=(´ο`*)))

1)报错:‘emulator’ 不是内部或外部命令

如果没有配置环境变量,会报:‘emulator’ 不是内部或外部命令 的错误。可以去配置,也可以进入安装的AndroidSDK下的tools目录下执行命令。

2)使用Android Studio自带的模拟器,第三方模拟器暂时不知道怎么使用
3)模拟器的名称

模拟器的名称的查看有两种方式:
a) 查看目录
我这边的目录是C:\Users\Shirley\.android\avd,一般应该都能在C盘的用户目录下找到.android文件夹
Android模拟器挂载虚拟串口进行通信之踩坑记_第7张图片
b) cmd命令
输入以下指令也能查看模拟器列表

emulator -list-avds
Android模拟器挂载虚拟串口进行通信之踩坑记_第8张图片
3)报错:Missing emulator engine program for ‘x86’ CPU

参考博客的指引,重新下载不带Google APIs的x86 Images, 然后再重启终端,重新输入命令

4)报错:Failed CreateFile (5)
Android模拟器挂载虚拟串口进行通信之踩坑记_第9张图片

# ̄~ ̄#网上资料找找找,据悉返回5表示串口被占据了,需要关闭串口才能成功
注意,串口和模拟器都必须要关闭

5)关于模拟器的版本和Root的问题

最开始是使用Android 10.0 模拟器,连接上了但运行测试程序时结果还是失败。网上说模拟器要Root才行ε=(´ο`*)))

然后开始给模拟器获取Root权限。找了个教程,教程是使用Android 8.0的,于是捣鼓了半天,结果终于在Android 8.0 的模拟器上Root成功,运行Demo时有四个串口地址,只有ttyS0可以打开,但是却不能通信。咋回事儿ε=(´ο`*)))

后来想到是不是Android版本的问题,于是又试了Android 7.0 的,还是不行

各种想想想,各种找找找,最后看到一篇博客中使用Android 4.4,然后就试了下Android 4.4 版本的模拟器,结果一试就成功了,哈哈哈。还发现原来4.4的模拟机是root过了的,直接挂载串口就行了。

4 总结

其实还有很多不懂的,比如说串口挂载的原理,怎么Android 4.4 的模拟器默认就是Root了呢,怎么其他版本的模拟器Root过了也还是不能通信呢,怎么有四个地址呢,怎么版本8.0的可以打开ttyS0但却不能通信呢,ttyS1可以和COM2通信说明ttyS1才是映射到COM1的吗,ε=(´ο`*)))

好多问题,虽然成功通信了还是一头雾水呀。。。ε=(´ο`*)))唉先这样吧

你可能感兴趣的:(android开发,Android模拟机串口通信)