为Android编写USB驱动程序

NK-*_*NK- 5 usb android driver

我正在开发一个Android应用程序,我需要连接到USB设备.

我在Windows上开发了类似的应用程序,我用c编写了驱动程序.

我想为我的Android应用程序开发一个USB驱动程序.我想知道为Android开发USB驱动程序需要什么.

要么

我可以使用ndk重用c中编写的代码吗?

谢谢,

bas*_*ske 8

首先,Android实际上只是Linux,所以如果你在谈论"为我的Android应用程序编写USB驱动程序",你应该说"为你的特定设备编写一个linux USB驱动程序".

接下来,您必须以某种方式访问​​您的设备.为linux编写USB驱动程序后,您将得到的可能是/ dev /中的某个文件节点.我猜你想要为非标准的USB设备(如鼠标/操纵杆/大容量存储器)创建一个驱动程序,Android不提供一个不错的JAVA API?在这种情况下,您将不得不编写一个本机库(可能基于您已有的C代码)并使用NDK编译它.您将从中获取的.so文件可以打包到您的Android应用程序中,然后可以使用它与您的USB设备进行通信.

总结一下:

usb设备驱动程序 - >创建一个内核模块或将驱动程序嵌入你的linux内核:这是linux usb驱动程序编程的东西,你应该能够在网上找到足够的指南.如果你真的创建了一个windows usb驱动程序,你应该可以重用c代码的一部分.

用于访问设备的本机包装器库(.so文件,或者.dll,如果您习惯使用Windows术语) - >创建一个NDK项目,打开正确的设备节点并正确读取/写入您的设备.

android app - >包含.so文件并通过jni访问其原生(c)方法.您可以使用javah或swig等工具从库的头文件生成jni代码.


Nei*_*eil 5

前面的答案假设您拥有设备的 root 访问权限,并且不适合大规模部署。自 api 版本 12 起,android 提供了一个 USB 接口,允许您使用低级控制通道和 USB 请求缓冲区与某些设备进行交互。

有两种类型的设备支持 USB 主机设备 USB (android) 附件设备

主机模式通常仅在平板电脑上得到很好的支持,手机可以并且确实支持它,但它们维持主机模式的能力较少且很大程度上取决于相关设备的电压要求

配件模式很奇怪,因为它扩展了 USB 标准,添加了一个额外的交换,将配件识别为“android”配件

如果上述模式对您有用,那么它们是迄今为止使用低级 C 驱动程序的更好选择,除非您可以完全控制将安装该驱动程序的所有设备。

这些都是 java api,可以在 google android 文档网站的 usb 下找到文档。

  • 你不可以。本机代码可以在没有 root 的情况下构建、开发和部署,但访问系统拥有的资源(例如设备)将需要 root。一个非 USB 的示例是使用标准的 linux sshd,例如 dropbear,您可以在 Play 商店中找到它们,但是为了在标准端口上运行,它们需要以 root 身份运行。 (2认同)