【问题标题】:Using libusb in Android application: how to allow application to access USB在 Android 应用程序中使用 libusb:如何允许应用程序访问 USB
【发布时间】:2011-11-20 03:15:50
【问题描述】:

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

提前致谢。

P。 S. 至于问题 1,我已经为 /dev/bus/usb 尝试了 chmod 666,但它显示“权限被拒绝”(注意我的设备已植根)。

附言mount usbfs none /proc/bus/usb -o devmode=0666 甚至不执行,好像我拼错了什么(但我没有)。


我确信可以让 libusb 在具有 USB 主机的根 Android 设备上运行,但我从未管理过它,因此我不得不将应用程序限制为 Android 3.1+ 并使用 USB API。

【问题讨论】:

  • 您显然正在使用 Android 3.1,您是否考虑过在 Android SDK 中使用 USB APIs
  • @Frxstrem:是的,我不得不求助于那个解决方案。我对它不太满意,但它可以工作,而且它是在 Android 上使用 USB 的标准方式,所以我想我应该结束这个问题。
  • 不要关闭,直接回答。
  • 你试过sudo chmod 666 用于/dev/bus/usb 吗?
  • @SergeyK.:我相信我做到了。但不能肯定地说。我放弃了使用libusb,只使用了标准的Android USB API,无论如何这是正确的方法。

标签: android-ndk libusb-1.0


【解决方案1】:

在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

OLD LINK (DEAD LINK) 这里的解决方案: https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993

【讨论】:

  • 链接已损坏。
  • @jayeffkay 更新链接。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2015-08-24
  • 1970-01-01
  • 2018-11-12
  • 2015-05-23
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多