我正在开发一个Android应用程序,我需要连接到USB设备。
我在Windows上开发了一个类似的应用程序,我用c编写了驱动程序。
我想为我的Android应用程序开发一个USB驱动程序。 我想知道为Android开发USB驱动程序需要什么。
或
我可以使用ndk重用c中编写的代码吗。
谢谢,
答案 0 :(得分:7)
首先,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代码。
答案 1 :(得分:3)
上一个答案假定您拥有对设备的root访问权限,并且不适合大规模部署。由于api版本12 android提供了一个usb接口,允许您使用低级别控制通道和USB请求缓冲区与某些设备进行交互。
支持两种类型的设备 USB主机设备 usb(android)配件设备
主机模式通常只支持平板电脑,手机可以并且确实支持它但是它们维持主机模式的能力较低且非常依赖于deviec在问题中的电压需求
配件模式很奇怪,因为它扩展了usb标准以添加额外的交换,将附件标识为“android”配件
如果您可以使用上述模式,那么它们是使用低级别c驱动程序的最佳选择,除非您对将要安装的所有设备进行完全控制。
这些都是java apis,可以在usb下的google android文档站点上找到。