Сегодня я узнал, что в Qt для Android стек Bluetooth реализован через JNI.
Нет, нет, я должен дать более широкий взгляд, чтобы было понятно. В Android есть два слоя, на которых работает Bluetooth. Первый - это сишный сервис Bluedroid, придуманный Broadcom'ом. У него приватные хедеры и он не относится к Stable API. Поверх него - враппер в виде библиотеки libbluetooth_jni.so с обёртками к вызовам для Java. Вкупе с классами из рантайма Dalvik она образует второй слой, слой для работы приложений. Он как раз относится к Stable API.
Что сделали разработчики Qt? Они взяли этот второй слой и обернули его в ещё один слой JNI - теперь уже для работы своих крестовых приложений. Итого путь, по которому мы работаем в Qt с Bluetooth теперь - Android bluetooth driver -> BlueDroid -> BlueDroid JNI -> Java -> QtBluetooth JNI -> Qt App - и обратно.
Я не жалуюсь. И разработчиков не в чем упрекнуть. В самом деле, их можно понять, первый слой может быть каким угодно на разных телефонах, и стабилен только второй. Но вместе с этим это создаёт настолько вывернутую наизнанку картинку в моём мозгу, настолько острое ощущение неправильности, что я пишу сюда.
Лор, я в печали. Абсурдность этого мира повергает меня в пучины отчаяния.