Android 模拟器串口与PC虚拟串口通讯

2023-05-16

基于上一篇文章,Android studio 使用NDK 实现串口 动态库 使用NDK生成.so 库操作PC中的串口

以及Android studio 3.0 and Gradle3.0 JNI 生成.so 库。

1、开发环境

 

(1) Android Studio 3.0.1      (2) JDK 1.8   (3) 

 

1、创建SerialPortNDKText 工程

 

2、在工程的main目录下,创建jniLibs文件夹,如:E:\androidcode\SerialportNDKTest\app\src\main

jniLibs  //注意文件夹名字,不要打错,不然编译是会报错,而且非常难找

 

 

 

 

3、导入相关平台Serial_Port.so 库,如我上一篇文章的生成的.so库在工程目录下

E:\androidcode\SerialPortNDK\app\build\intermediates\ndk\debug\lib

将上图lib目录的各个的.so库libserial_port.so 复制到工程“SerialPortNDKText”的jniLibs目录下。

 

 

4、添加SerialPort.java和SerialPortFinder.java文件

注意:这两个文件存放的目录必须和生成libSerialPort.so工程的相同,否则编译时,会总是报错,提示找不到xxx.so文件

(2018.8.2 补充:上面这个问题估计是新手最容易犯的,因为在JNI工程中,SerialPort.java和SerialPortFinder.java所在的包生成

生成JNI.h 文件已经包含两个java所在的包名信息,故在App 工程中,需要一致)

我第一次操作的时候,就吃了这个大亏,这个问题足足搞了3个晚上.....哭哭所以一定要注意。。。

4.1 新建serialprot 包

 

4.2 导入SerialPort.java和SerialPortFinder.java文件

4.3 在MainActivti.xml 中新建两个按钮,一个用于打开当前系统的串口,第二个用于测试发送和接收数据

5、打开模拟器命令

如果是笔记本,则一般是没有串口的,因此如果想调试串口,可以使用虚拟串口工具,如:

我使用的Configure Virtual Serial Port Driver.exe 这款软件就非常好用,如图:

5.1 我将COM1 和 COM2 虚拟出来,则表示C0M1 -> COM2 是相通的。

5.2 打开串口调试工具,如图:

5.3 将模拟器绑定到Windows 的虚拟串口COM1 映射到Android 模拟器中,(提示,我调试使用的Android 模拟器版本是4.4 对应API 版本

API19,而Android 5.0 以上的系统由于安全权限不一样,当运行SerialPort类的构造方法中下面代码,则会提示没有权限

 

/* Check access permission */
		if (!device.canRead() || !device.canWrite()) {
			try {
				/* Missing read/write permission, trying to chmod the file */
				Process su;
				su = Runtime.getRuntime().exec("/system/bin/su");
				String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"
						+ "exit\n";
				su.getOutputStream().write(cmd.getBytes());
				if ((su.waitFor() != 0) || !device.canRead()
						|| !device.canWrite()) {
					throw new SecurityException();
				}
			} catch (Exception e) {
				e.printStackTrace();
				throw new SecurityException();
			}
		}

对于上面的问题,目前本人还是个菜鸟新人,还没有找到解决办法,如果有大神知道,可以给小弟提点意一下。大笑
接着,win + r 打开window 控制台,输入映射命令

 

映射的命令是:emulator @模拟器名字 -qemu -serial COMX(电脑串口号)

如我的,emulator @api -qemu -serial COM1    

 

 

5.4 运行APP 

5.4.1 模拟器发送数据 -》串口助手接收数据:

5.4.2 模拟器接收数据 -》串口助手发送数据

好了,终于完成了,使用串口助手和Android模拟器互相收发数据。

 

但是,目前还是存在三个没有弄清楚的问题,有待解决。

第一个:就是使用模拟器,串口最大接收的字节数是8字节,超过这个数值模拟器就是类似死掉,毫无反应。

第二个:就是串口号与Linux 系统中的ttySxxxx 对应问题,如果映射的Windows串口号与app 打开串口对不上,则会出现

下面的错误:tcgetattr() failed  

 

D/serial_port: Opening serial port /dev/ttyS2 with flags 0x2
D/serial_port: open() fd = 46
D/serial_port: Configuring serial port
E/serial_port: tcgetattr() failed
E/SerialPort:  nativeopen returns null
W/System.err: java.io.IOException
W/System.err:     at chenxi.com.serialportjni.SerialPort.<init>(SerialPort.java:64)
W/System.err:     at chenxi.com.serialportndktest.MainActivity$2.onClick(MainActivity.java:105)
W/System.err:     at android.view.View.performClick(View.java:4438)
W/System.err:     at android.view.View$PerformClick.run(View.java:18422)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:733)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)

有些电脑使用的是网上很多使用的是 ttyS2, 而在我的模拟器上就会出现上面的问题,进过多次尝试,使ttyS1 才能正常收发数据,这个问题需要再查查资料。

(2018.8.2 补充:  之前没有把Linux 与 Android 联系起来,所以才没有把这个疑问给想通,最近,在公司做项目需要做三个平台的开发包Windows、Linux 和 Android,于是查看Linux 串口一些资料,发现一般的:

1、查看串口是否可用:可以对串口发送数据比如对com1口,echo /dev/ttyS0
2、在Linux查看串口名称使用

   ls -l /dev/ttyS*
  一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;

而且在上面的 5.3提到 我是”将模拟器绑定到Windows 的虚拟串口COM1 映射到Android 模拟器中“”所以,才有在打开串口是需要使用的是ttyS1)

第三个:就是使用root的权限修改串口权限,有两种情况,

(1)

su = Runtime.getRuntime().exec("/system/xbin/su");

(2)

 

 

su = Runtime.getRuntime().exec("/system/bin/su");

上面三个问题,还需要,多查查资料才行。

 

 

OK, 终于完成了。开心!!!!!!!!!!O(∩_∩)O哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 模拟器串口与PC虚拟串口通讯 的相关文章

随机推荐

  • centos7系统安装好后远程连接执行命令很卡

    centos7系统安装好后 xff0c 远程连接也ok 但远程连接之后执行命令很卡 xff0c 这个问题可能是macaddr导致的 xff0c 我们要检查一下macaddr是否和其他的服务器相同 MACADDR 61 其中 以AA BB C
  • UESTC 1170 红蓝点对

    UESTC 1170 是个变异的最近点对题目 xff0c 用分治策略和计算几何做的话好像会超因为时间上是1000ms xff0c 下面这个贪心做法是看了别人的博客知道的 处理红点到原点的距离然后根据距离排序 xff0c 蓝点一样 xff0c
  • CDH环境下HDFS权限问题

    CDH环境下Hadoop平台最高权限用户是hdfs xff0c 属于supergroup组 默认HDFS会开启权限认证 xff0c 所以操作时 xff0c 需要将root用户切换到hdfs用户 xff0c 否则会报错 问题 xff1a or
  • 手动开启/关闭HDFS的safemode(安全模式)

    在hadoop启动namenode的时候 xff0c 会启动安全模式 xff08 safemode xff09 xff0c 在该模式下 xff0c namenode会等待datanode向它发送块报告 xff08 block report
  • centos7 update gcc to 7.2

    centos7默认的gcc版本是4 8 xff0c 我们需要升级到7 2 安装gcc span class token function wget span https github com gcc mirror gcc archive r
  • centos7升级GLIBC后导致系统不能启动成功

    centos7 glibc2 13 glibc2 27 1 准备U盘系统盘 xff0c 系统要和原来的系统版本匹配 开机重启按F2进入BIOS xff0c 通过U盘启动系统 选择Rescue mode 2 接下来 xff0c 选择 Resc
  • 在Linux中如何运行C语言写的脚本

    目录 1 xff1a Linux下如何运行C语言脚本 2 xff1a 实例展示 1 xff1a Linux下如何运行C语言脚本 Linux别的系统我不知道是不是这个方法 xff0c 我是用的ubuntu的 xff0c 其他的我也没测试过 x
  • Linux——利用Shell脚本编写进度条

    初级版本 xff08 原始进度条 xff09 xff1a span class hljs shebang bin bash span span class hljs built in echo span span class hljs st
  • C语言的日期和时间函数的用法及相应示例

    1 xff0e 概念 在C C 43 43 中 xff0c 对字符串的操作有很多值得注意的问题 xff0c 同样 xff0c C C 43 43 对时间的操作也有许多值得大家注意的地方 下面主要介绍在C C 43 43 中时间和日期的使用方
  • xrdp完美实现Windows远程访问Ubuntu 16.04【包括多人桌面与原生桌面】

    多人桌面 1 安装xrdp sudo apt get install xrdp 2 安装vnc4server 我这里是安装xrdp的时候自动安装的 我看网上很多说是需要单独安装的 3 安装xfce4 sudo apt get install
  • C++ range

    C 43 43 20 引入了 range 来简化对元素序列的处理 xff08 可以省略掉许多的循环遍历 xff09 1 range 和 view range range concept 通过提供一个迭代器以及一个哨兵来表示一个元素范围 xf
  • 高效求两个list的差集

    查一个ListA 的每个值 xff08 String字符串 xff09 在另外一个ListB中是否存在 xff0c 如果不存在就记录下来 模拟数据量 xff1a 100万 方法一 xff1a 直接调用list自带的removeAll方法 p
  • Codeforces Round #368 (Div. 2) A C

    大清早发现自己的rating涨了72分还是很高兴的 xff0c 毕竟之前都是在掉分 xff0c 还差9分才能到宝蓝啊 xff0c 果然还是小菜鸡 A Brain 39 s Photos 大水题 xff0c 要不是这个codeforces是外
  • Linux DISPLAY 设置

    在Linux Unix类操作系统上 DISPLAY用来设置将图形显示到何处 直接登陆图形界面或者登陆命令行界面后使用startx启动图形 DISPLAY环境变量将自动设置为 0 0 此时可以打开终端 输出图形程序的名称 比如xclock 来
  • cmake简单使用及编译项目打包成so文件

    简介 CMake是一个跨平台的编译自动配置工具 xff0c 它使用一个名为CMakeLists txt的文件来描述构建过程 xff0c 可以产生标准的构建文件 它可以用简单的语句来描述所有平台的安装 编译过程 它能够输出各种各样的makef
  • 2021基于Debian的All in One(NAS+软路由)配置教程

    基于Debian10的NAS系统配置 系统概述需求分析功能实现 系统配置简介Debian10的镜像下载与安装系统配置准备oh my zsh安装ssh远程访问开机自动登录root花生壳远程sshFrp图形化界面卸载网路配置磁盘相关命令 软件安
  • 3D Slicer源代码编译与调试(Visual Studio)

    开始 本文将Slicer的源码在Windows系统的编译过程记录下来 我的编译环境 xff1a Qt5 9 3VS2015Git 2 16 1CMake 3 14 1NSIS Unicode NSIS 编译 上述编译环境的准备好之后 xff
  • c++对象模型

    一 什么是c 43 43 对象模型 语言中直接支持面向对象程序设计的部分 对于各种支持的底层实现机制 二 c 43 43 对象的布局成本 成员函数不占用成本 member functions虽然再class的声明之内 xff0c 却不在ob
  • mybatis-plus返回查询总记录数方式(亲测)

    这篇文章主要介绍了mybatis plus返回查询总记录数方式 xff0c 具有很好的参考价值 xff0c 希望对大家有所帮助 如有错误或未考虑完全的地方 xff0c 望不吝赐教 mybatis plus返回查询总记录数mybatis pl
  • Android 模拟器串口与PC虚拟串口通讯

    基于上一篇文章 xff0c Android studio 使用NDK 实现串口 动态库 使用NDK生成 so 库操作PC中的串口 以及Android studio 3 0 and Gradle3 0 JNI 生成 so 库 1 开发环境 1