En primer lugar, Android es en realidad sólo Linux, por lo que si usted está hablando de "escribir un controlador USB para mi aplicación Android" que más bien debería decir "escribir un controlador USB Linux para su dispositivo específico".
A continuación, tendrá que acceder a su dispositivo de alguna manera. Lo que obtendrá cuando haya escrito el controlador USB para Linux es probablemente algún nodo de archivo en/dev /. Supongo que quiere crear un controlador para un dispositivo USB no estándar (como un mouse/joystick/almacenamiento masivo) para el cual Android no proporciona una buena API de JAVA. En ese caso, tendrá que escribir una biblioteca nativa (probablemente basada en el código c que ya tiene) y compilarla con el NDK. El archivo .so que obtendrá de él se puede empaquetar en su aplicación Android, que luego puede usarlo para hablar con su dispositivo USB.
Así que para resumir: controlador de dispositivo
USB -> crear un módulo del núcleo o incrustar un controlador en el kernel de Linux: esto es Linux USB cosas de programación conductor, sobre las que debería ser capaz de encontrar suficientes guías En la red. Debería poder reutilizar partes de su código c si realmente creó un controlador usb de Windows.
biblioteca contenedora nativa para acceder a su dispositivo (archivo .so o .dll si está acostumbrado a la terminología de Windows) -> cree un proyecto NDK que abra el nodo del dispositivo correcto y lea/escriba correctamente en su dispositivo.
android app -> incluye el archivo .so y accede a sus métodos nativos (c) a través de jni. Puede usar herramientas como javah o swig para generar el código jni a partir de los archivos de cabecera de su biblioteca.
¿Las aplicaciones NDK requieren acceso raíz? –
No, no es así. El código nativo puede desarrollarse desarrollado e implementado sin root, pero el acceso a los recursos propios del sistema, como los dispositivos, requerirá root. Un ejemplo que no sea USB usaría un sshd linux estándar como dropbear, esto es plausible, puedes encontrarlos en Play Store, sin embargo, para ejecutarlos en los puertos standrard necesitarían ejecutarse como root. – Neil