Невозможно получить интерфейс USB под эмулятором Android и macOS - PullRequest
0 голосов
/ 02 марта 2020

У меня проблема с моим Android приложением, которое должно обмениваться данными через подключенное USB-устройство (пользовательский аудиоинтерфейс) в Android Эмулятор (API-28) в macOS.

По какой-то причине код не срабатывает claimInterface() функция:

UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); //pass
UsbDeviceConnection connection = mUsbManager.openDevice(device); //pass
UsbInterface intf2 = device.getInterface(2); //pass

connection.claimInterface(intf2, true); //<< fails here!

Этот код отлично работает на реальном Android телефоне, но в эмуляторе - нет. Код может обнаружить устройство, может найти информацию дескриптора, но не может передать функцию claimInterface().

Я уже выполнил необходимые шаги, чтобы USB-API работал в эмуляторе, записав необходимые настройки в /system/etc/permissions/android.hardware.usb.host.xml, запустил эмулятор с Опция -writable-system и сопоставление моего устройства с QEMU с помощью этой команды:

sudo ./emulator -writable-system -avd a9 -qemu -usb -device usb-host,vendorid=0x0483,productid=0x5730

Я подозреваю, что на драйвере ядра хоста можно получить контроль над моим устройством, поэтому я выгружаю драйвер с помощью этой команды:

sudo kextunload /System/Library/Extensions/AppleUSBAudio.kext

После выгрузки драйвера я больше не могу видеть мое устройство в настройках звука Ma c, но все еще имеет ту же ошибку в Android App.

Что может быть здесь не так и как решить этот вопрос?

...