Android L | Libusb_init возвращает LIBUSB_ERROR_OTHER (-99)

Я пытаюсь использовать libusb на не укоренившемся Nexus 5, как это рекомендовано в этом подходе (путем переноса дескриптора файла usb с java на родную).

Мое приложение запрашивает разрешение через UsbManager.requestPermission а затем запускает собственный метод, который вызывает libusb_init для создания libusb_context .

Но libusb_init возвращает код LIBUSB_ERROR_OTHER (-99). После копания в коде я вижу, почему это происходит. Отчеты libusb 'could not find usbfs' потому что opendir("/dev/bus/usb") возвращает 0 .

Также из adb shell я не могу выполнить ls /dev , странно, потому что у меня есть права (на Huawei U8950-1 с такими же правами я могу это сделать):

drwxr-xr-x root root 2014-09-04 10:26 dev

Похоже, что описанный ниже подход работает не для всех устройств Android. Может кто-нибудь объяснить, почему?

Solutions Collecting From Web of "Android L | Libusb_init возвращает LIBUSB_ERROR_OTHER (-99)"

В этой версии libusb уже есть исправление:

https://github.com/martinmarinov/rtl_tcp_andro-

Теперь вам не нужно будет передавать дескриптор файла, вам также нужно будет передать путь к файлу устройства через UsbDevice.getDeviceName ().

Похоже, у Android L есть дополнительное ограничение на доступ к директории /dev . У меня больше нет идей об этом

Обновить

Улучшения безопасности в Android 5.0

Android-песочница усилена SELinux . Android теперь требует SELinux в режиме принудительного исполнения для всех доменов. SELinux – это обязательная система контроля доступа (MAC) в ядре Linux, используемая для увеличения существующей модели [контроля дискретного доступа (DAC)] ( http://en.wikipedia.org/wiki/Discretionary_access_control ). Этот новый уровень обеспечивает дополнительную защиту от потенциальных уязвимостей безопасности.

обходные

  1. Установите SELinuxModeChanger и измените режим SELinux на permissive
  2. https://github.com/Gritzman/libusb

Существует специальный libusb 1.0, способный решить эту проблему, выполнив LibusbInit, пройдя путь к USB-устройству, это может обойти команду readdir http://www.libusb.org/ скачать с домашней веб-страницы.