I think you can do it without a root.
You will need to do all this using the native C code interface with a USB device using USBFS. The big problem is the lack of linux usbfs documentation. Basically, everything should be done through ioctls. However, you open the device, as usual, with Java. Then you pass the file descriptor from USBDeviceConnection
Add to this that you will need to parse all the USB descriptors yourself. You can get them again from the USBDeviceConnection . Going from descriptor to descriptor is just a search for documentation for which each descriptor means a MASSIVE headache, but you can find most of the documentation at www.usb.org.
I wrote most of the code that is required for parsing audio devices, and I got to the point of trying to send an isochronous transmission, and then started getting errors.
After switching to libusb, I found that the problem in my case was that the audio device also had HID controllers, and the default driver was attacked by this and steal the entire bandwidth from isochronous transmission. If I knew this before, I could continue to use the non-root non-libusb method. As it was, I got isochronous translations working via lib usb, but this required a root device :(
At some point I will return to him.
In conclusion, I am sure it is possible, but it will not be easy!
source share