Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo dar permisos / dev / bus / usb para aplicaciones libusb android?

Estoy desarrollando una aplicación que utiliza libusb vía jni. Esta aplicación está dirigida actualmente sólo a las máquinas con Android 3+ enrutadas.

El escenario es el siguiente:

  • Android gps proveedor y gps icono
  • Restaurar la jerarquía de vista desde el estado guardado no restaura las vistas agregadas programaticamente
  • Android: crea automáticamente variables para todos los IDs en xml
  • Derecho a la izquierda ProgressBar?
  • El botón de inicio en la barra de acción no funciona en Lollipop
  • Reutilizar conexiones TCP con HttpsUrlConnection
  • <java Activity> loads <jni_wrapper.so> which wraps <my_main_lib.so> that uses <libusb.so> that needs rw access to: /dev/bus/usb/<device> 

    Todas las bibliotecas nativas de .so son parte de una infraestructura que instalo (como root) en / system / lib, que luego puede ser utilizada por java Activities, ejecutada por los usuarios simples.

    Eso significa que toda la comunicación usb debe hacerse desde el lado nativo.

    Tengo todo para trabajar bien, excepto por un problema – los permisos usb: los permisos por defecto de / dev / bus / usb / entries son (0660, uid = root, gid = usb).

    Obviamente, un proceso java estándar que ejecuta un código nativo no cumple con ninguno de los requisitos anteriores, forzándome a "chmod 666" la entrada / dev correspondiente, para que esto funcione.

    Esta solución no es tan buena, sin embargo, porque no sobrevive a reiniciar, o desconectar / replugging del dispositivo (permisos volver a 0660).

    La solución que estoy buscando necesita:

    • Sobrevivir reiniciar / replugging
    • Ser instalado ~ una vez ~ por la raíz, y no involucrar molestar al usuario cada vez que gane permisos
    • Ser genérico y correr en todas las máquinas (+ la mayoría) android 3+
    • [No obligatorio] da las credenciales mínimas necesarias

    Cómo llegar i thought of:

    • Cambiar permisos en /init.rc o /ueventd.rc -> ambos se anulan en cada reinicio
    • Usbfs / proc / bus / usb con devmode = 0666 -> sobrevive al replugging, pero no reinicia
    • Haciendo que mi proceso se une al grupo "usb"? -> He intentado android.permission.ACCESS_USB, pero no funciona / soportado …: /

    ¿algunas ideas? Todos los derechos reservados

    ¡Gracias!

  • ScrollView - ¿Cómo desplazarse hacia abajo mientras se diseña el diseño en Eclipse?
  • ¿Cómo reiniciar automáticamente un servicio incluso si la fuerza del usuario lo cierra?
  • Error de facturación de la aplicación en Android Debes iniciar sesión en tu cuenta de Google
  • Retrofit de devolución de llamada en el hilo principal
  • Android Preferencias compartidas ejemplo
  • ¿Cómo puedo hacer coincidir una revisión de Servicios de Google Play con una versión de instalación?
  • 4 Solutions collect form web for “¿Cómo dar permisos / dev / bus / usb para aplicaciones libusb android?”

    Tengo el mismo problema y lo soluciono haciendo esto en el ndk, cambiando / proc / bus / usb para donde se monta el usb en su caso. Espero eso ayude.

     r = system("su -c \"chmod -R 777 /proc/bus/usb/\""); if(r!=0) { LOGD("Could not grant permissions to USB\n"); eturn CANT_GRAN_PERMISSION_USB; } 

    Hay algún método del equipo de desarrolladores de libusb. Para mi caso, selecciono el primer método.

    Desde: https://github.com/libusb/libusb/blob/master/android/README

    Permisos de tiempo de ejecución:

    La configuración predeterminada del sistema en la mayoría de dispositivos Android no permite el acceso a dispositivos USB. Hay varias opciones para cambiar esto.

    Si tiene control de la imagen del sistema, puede modificar el ueventd.rc utilizado en la imagen para cambiar los permisos en / dev / bus / usb / / . Si utiliza este enfoque, es aconsejable crear un nuevo permiso de Android para proteger el acceso a estos archivos. No es recomendable otorgar a todos los usuarios permisos de lectura y escritura a estos archivos.

    Para los dispositivos enraizados, el código que utiliza libusb se podría ejecutar como root mediante el comando "su". Una alternativa sería utilizar el comando "su" para cambiar los permisos en los archivos / dev / bus / usb / apropiados.

    Los usuarios han informado del éxito en el uso de android.hardware.usb.UsbManager para solicitar permiso para usar UsbDevice y, a continuación, abrir el dispositivo. Las dificultades en este método es que no hay garantía de que siga funcionando en las futuras versiones de Android, se requiere invocar las API de Java y ejecutar código para hacer coincidir cada android.hardware.usb.UsbDevice con un libusb_device.

    Editar:

    Después de volver a leer la pregunta, es claro que no entendí que la máquina host estaba ejecutando Android. Como udev no existe en Android, la respuesta a continuación no responde a la pregunta. Estoy dejando esta respuesta aquí en caso de que alguien esté buscando información sobre cómo conseguir que los dispositivos Android sean reconocidos por una computadora host linux no Android.

    End Edit

    Los permisos predeterminados de estos controladores (/ dev / bus / usb / ### / ###) son determinados por udev. En particular, analiza los archivos de configuración en /etc/udev/rules.d y /lib/udev/rules.d en orden numérico para determinar los valores predeterminados.

    Para anular los valores predeterminados, tendrá que crear su propio archivo udev .rules. Para ello, necesita el ID de proveedor del dispositivo al que desea conceder permiso. Lsusb imprimirá la identificación del dispositivo para cualquier dispositivo en particular y, si desea una lista de todos los proveedores, puede probar esto .

    Por lo tanto, en el archivo /etc/udev/rules.d/99-android.rules, complete la siguiente línea para cada proveedor que desee admitir:

     SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE:="0666" 

    Tenga en cuenta que en el ejemplo vinculado a lo anterior, utilizan = en lugar de: = y SYSFS en lugar de ATTRS. No sé por qué, pero me encontré con que ese archivo no funcionaba literalmente en mi máquina.

    Después de escribir el archivo,

     restart usbserial 

    Y vuelva a enchufar el dispositivo. Debe ahora tener por defecto 666 permisos.

    Encontré la solución sin enraizar el dispositivo.

    Probado en Android 4.2.2 Kernel versión 3.3.39

    Todo lo que necesitas hacer es añadir tu aplicación al grupo "usb"

    Sin root, puede usar el archivo de permisos en /system/etc/permissions/platform.xml

    Elige un permiso que no uses, por ejemplo "android.permission.CAMERA".

    Modifique /system/etc/permissions/platform.xml como este:

     <permissions> ... <permission name="android.permission.CAMERA" > <group gid="camera" /> </permission> <permission name="android.permission.CAMERA" > <group gid="usb" /> </permission> ... </permissions> 

    Por lo tanto, agrega <uses-permission android:name="android.permission.CAMERA" /> a su archivo de manifiesto de aplicación, y disfrutar de libusb accesible usb!

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