2012-10-05 107 views
5

我正在开发一个需要连接到USB设备的android应用程序。为Android编写USB驱动程序

我在Windows上开发了一个类似的应用程序,我用c写的驱动程序。

我想为我的android应用程序开发USB驱动程序。 我想知道什么是必要的开发Android的USB驱动程序。

我可以重复使用ndk编写的代码。

感谢,

回答

6

首先,Android是实际上只是Linux的,所以如果你是在谈论“编写USB驱动程序我的Android应用程序”你倒是应该说“写为您的特定设备的Linux USB驱动程序”。

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

所以总结起来:

USB设备驱动程序 - >创建一个内核模块或嵌入驱动程序到你的Linux内核:这是Linux的USB驱动程序的东西,你应该能够找到足够的指南针对在网上。如果你真的创建了一个Windows USB驱动程序,你应该能够重用你的C代码的一部分。

用于访问设备的原生包装库(.so文件或用于Windows术语的.dll) - >创建NDK项目,打开正确的设备节点并正确读取/写入设备。

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

3

上一个答案假定您具有对设备的根访问权限,并且不适合大规模部署。由于api version 12 android提供了一个usb接口,允许您使用低级控制通道和usb请求缓冲区与某些设备进行交互。

有两种类型的设备支持 USB主机设备 USB(机器人)的附属设备

主机模式通常只能在平板电脑支持不好,手机可以做支持,但他们的ablity维持主机模式以下,非常依赖于问题deviec的电压需求

附件模式为奇数时,因为它延伸USB标准添加标识的附件作为“机器人”附件

额外交换如果上述模式的您可以重新使用它们,那么,除非您完全控制将安装的所有设备,否则它们是使用低级别c驱动程序的更好选择。

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

+0

NDK应用程序是否需要root访问? –

+1

不,你不知道。本地代码可以在没有root的情况下构建开发和部署,但是访问系统拥有的资源(如设备)将需要root权限。一个非USB的例子就是使用标准的linux sshd,比如dropbear,这是合理的,你可以在play store上找到它们,但是为了在standrard端口上运行它们需要以root身份运行。 – Neil