在 Qt 中,如何在 Android 上使用 USB OTG 串行接口?

Posted

技术标签:

【中文标题】在 Qt 中,如何在 Android 上使用 USB OTG 串行接口?【英文标题】:How can one use an USB OTG serial interface on Android, in Qt? 【发布时间】:2020-06-02 10:16:50 【问题描述】:

我打算将 Qt 桌面应用程序移植到 android。它使用 QSerialPort 与外部设备(内置 CP210x)进行通信

该应用程序虽然纯粹用 Qt 和 C++ 编写,但在 Android 上运行良好,但它看不到设备。 CP210x official driver download page 建议在 Android 上从源代码编译内核,这对于普通客户来说是不可行的。我在网上找到的其他建议建议越狱手机,这也不是我们期望最终用户做的事情。

Qt 论坛上关于这个话题的问题很少,大多数人说 QSerialPort 对 Android 的支持非常有限。但是,这些主题通常至少存在 6-7 年。

Android 开发者forum/wiki/tutorial? 建议使用“Android Things”,无论它是什么。我找不到任何符合该描述的应用程序。

我知道在未越狱的 Android 上使用 serial-usb 在物理上是可行的,因为我尝试了一个串行控制台应用程序并且它工作正常,我可以成功地与我的设备交换数据。

这是否意味着唯一的办法就是用 Java 开发我自己的包装器并使用 JNIEXPORT?那会破坏我之前使用的简单的多平台编译(只是从 Qt Creator 中选择不同的工具包)有没有更简单的方法来完成这个? USB OTG 的使用率是否如此之低以至于没有人想到在这方面实现任何东西?

【问题讨论】:

【参考方案1】:

QSerialPort 只有非官方的部分 Android 支持(请参阅https://wiki.qt.io/Qt_Serial_Port)。

(...使用风险自负,仅用于有根设备,其中可以获取/设置 /dev/ttyXYZ 节点的权限)

您可以使用 JNI 获取具有权限的 FileDescriptor,然后使用 C++ 中的 libusb 库与设备通信。 但是,是的,它会破坏简单的多平台编译。

【讨论】:

以上是关于在 Qt 中,如何在 Android 上使用 USB OTG 串行接口?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上重新启动 Qt 或 c++ 中的程序?

如何通过 Qt 在 Android 和桌面中使用相机

如何使用 Qt 在 Android 中读取现有的 SQLite 数据库?

如何在 Android 上后台运行 Qt 应用程序?

如何使用 Qt API 在 android 中获取`/sdcard` 路径 [重复]

如何在 Qt for android 上获取应用程序参数