2011-09-19 136 views
7

我想在我的Android应用程序(Java GUI + native(C++)核心)中使用libusb。我已经编译过libusb并尝试调用它的函数,但libusb_open返回LIBUSB_ERROR_ACCESS。我想USB存取权限有问题,但我不知道如何解决这个问题。所以,这里有两个问题: 1)如何让libusb运行在一个扎根的Android 3.1设备上? 2)是否可以在无根的出厂默认设备上使用libusb?在Android应用程序中使用libusb:如何让应用程序访问USB

在此先感谢。对于问题1,我尝试了/ dev/bus/usb的chmod 666,但它说“权限被拒绝”(请注意我的设备是根源的)。

P.P.S. mount usbfs none/proc/bus/usb -o devmode = 0666甚至没有执行,就好像我拼错了某些东西(但我没有)。


我肯定知道这是可能得到的libusb与USB主机植根Android设备上工作,但我从来没有管理它,所以我不得不限制应用程序到Android 3.1+和使用USB的API。

+0

正如你显然是基于Android 3.1的工作,你有没有考虑使用[USB的API(http://developer.android.com/ guide/topics/usb/index.html)在Android SDK中? – Frxstrem

+0

@Frxstrem:是的,我不得不求助于这个解决方案。我对此并不满意,但它很有效,它是在Android上使用USB的标准方式,所以我想我应该关闭这个问题。 –

+2

不要关闭它,只需回答它。 –

回答

0

在android中,你不能使用libusb直接打开usb设备(这是你的结论:)。

为什么你无法打开?

您需要获得Android系统(!= Kernel)的权限才能打开设备。

做它在Java中:

当你请求,弹出如图用户接受或拒绝。 所以你需要在java中打开设备,并使用java提取fd并传递给libusb,以便它可以与设备进行通信。

现在libusb将如何从fd构建句柄?

更新:我维护一个针对Android修改的libusb版本(有更多的修正 - 测试/在Android 5.1及更低版本上运行)。看到https://gitlab.com/madresistor/libusb/blob/android/README

旧的链接(死链接),这里的解决方案: https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993

+0

链接已损坏。 – jayeffkay

+0

@jayeffkay更新后的链接。谢谢。 –

相关问题