Android L | Libusb_init devuelve LIBUSB_ERROR_OTHER (-99)

Estoy tratando de usar libusb en Nexus 5 no enraizada como se aconseja en este enfoque (mediante la transferencia de descriptor de archivo usb de java a lado nativo).

Mi solicitud solicita permiso a través de UsbManager.requestPermission y luego ejecuta el método nativo que llama a libusb_init para crear libusb_context .

Pero libusb_init devuelve el código LIBUSB_ERROR_OTHER (-99). Después de excavar en el código veo por qué sucede esto. Libusb reporta 'could not find usbfs' porque opendir("/dev/bus/usb") devuelve 0 .

También desde adb shell no puedo realizar ls /dev , extraño porque tengo derechos (en Huawei U8950-1 con los mismos derechos que puedo hacer esto):

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

Parece que el enfoque descrito a continuación no funciona para todos los dispositivos de Android. ¿Puede alguien explicar por qué?

Ya hay una corrección en esta bifurcación libusb:

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

Ahora, no sólo necesitará pasar el descriptor de archivo, también tendrá que pasar la ruta del archivo del dispositivo vía UsbDevice.getDeviceName ().

Parece que Android L tiene una restricción adicional sobre el acceso al directorio /dev . No tengo más ideas sobre esto

Actualizar

Mejoras de seguridad en Android 5.0

Sandbox Android reforzado con SELinux . Android ahora requiere SELinux en el modo de aplicación para todos los dominios. SELinux es un sistema de control de acceso obligatorio (MAC) en el kernel de Linux que se usa para aumentar el modelo de seguridad de control de acceso discrecional (DAC) [ http://en.wikipedia.org/wiki/Discretionary_access_control ]. Esta nueva capa proporciona protección adicional contra posibles vulnerabilidades de seguridad.

Soluciones alternativas

  1. Instale SELinuxModeChanger y cambie el modo SELinux a permissive
  2. https://github.com/Gritzman/libusb

Hay una libusb personalizada 1.0 que es capaz de resolver este problema haciendo LibusbInit pasando la ruta del dispositivo usb, esto puede anular el comando readdir http://www.libusb.org/ download desde la propia página web.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.