LINUX.ORG.RU
ФорумTalks

Yo dawg, I herd u like Bluetooth

 , ,


0

1

Сегодня я узнал, что в 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 - и обратно.

Я не жалуюсь. И разработчиков не в чем упрекнуть. В самом деле, их можно понять, первый слой может быть каким угодно на разных телефонах, и стабилен только второй. Но вместе с этим это создаёт настолько вывернутую наизнанку картинку в моём мозгу, настолько острое ощущение неправильности, что я пишу сюда.

Лор, я в печали. Абсурдность этого мира повергает меня в пучины отчаяния.

★★★

Последнее исправление: Adonai (всего исправлений: 1)

Эпичненько %)

Stil ★★★★★
()
Ответ на: комментарий от daemonpnz

Ты прав, к реализациям на других платформах у меня нет претензий. Счас отредактирую.

Adonai ★★★
() автор топика
Ответ на: комментарий от Deleted

а на андроид уже можно писать нативщину без жабо-обвязки? Что бы «от и до» только сишечка/кресты.

Stil ★★★★★
()

Не познав отчаяния, не познать надежду.

Deathstalker ★★★★★
()

Абсурдность этого мира повергает меня в пучины отчаяния.

Та же фигня. А ведь кто-то считает это нормальным.

Впрочем, кутистов можно понять. И это печально когда все всё понимают, но сделать ничего нельзя.

true_admin ★★★★★
()
Ответ на: комментарий от Stil

Можно не писать под андроид… :)

Deleted
()
Ответ на: комментарий от Stil

Лучше под него не писать. Убогая, глупая, неповоротливая платформа.

Solace ★★
()

Android bluetooth driver -> BlueDroid -> BlueDroid JNI -> Java -> QtBluetooth JNI -> Qt App

Ты забыл еще один слой. Под мобилки нынче модно писать на кумле. Qt App скорее всего надо разделить на Qt App C++ -> Qt App QML.

Нативным API на андроиде является именно жабба, а не кресты. Это не хорошо и не плохо, это - данность. Нужно меньше слоев абстракции? Выкинь культи, пиши на жаббе. Это наиболее прямой способ писать приложения под андроид (за исключением игор). Все остальное, включая культи - ненативные костыли и нашлепки.

archie
()
Ответ на: комментарий от i-rinat

В NDK есть пример.

Афайк NDK тоже не является чисто нативным. Например NativeActivity построен на JNI врапперах, а это значит ява обвязка все равно неявно будет присутствовать во всех приложениях. И на каждый чих все равно придется лезть в яву, поскольку NDK предоставляет только стандартную библиотеку C++, активити, GLES и звук.

archie
()

Дело в том, что этот твой блюдроед - выхлоп broadcom'а. У других вендоров BT чипов свои костыли, ни с чем не совместимые. У кого-то вообще там bluez и dbus в кишках крутятся. Потому эта особая магия - единственный способ сделать так, чтобы оно работало более или менее одинаково на всем зоопарке девайсов.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: Дежавю от Myau

Как ты тонко угадал. Разбираться с этим я стал как раз после того, как меня посетила мысль передавать звук с Bluetooth-гарнитуры через Android на стационарный комп. И делать я это намеревался через Pulseaudio.

Adonai ★★★
() автор топика

Андроид == жава. Только до многих это долго доходит)

F457 ★★★★
()
Ответ на: комментарий от Stahl

Ты либо умеешь программировать - тогда тебе абсолютно по барабану - С++, java или вообще Delphi. Или ты не умеешь программировать. Тогда тебе опять-таки по барабану.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

Ты либо умеешь управлять транспортными средствами - тогда тебе по барабану автомобиль, самолёт или вообще корабль. Или ты не умеешь управлять.
Я — сишник. И если мне надо (хочется) написать что-то под андроид, то мне не хочется вникать в жабу. Си от жабы отличается не только синтаксисом. Вся концепция разная.
Ты программист?
Точно?
Да, ты программист. Жабист видимо. Или всё ещё хуже?

Stahl ★★☆
()

весь мир это нагромождение слоёв

тоже мне повод для печали нашёл

Alyssa
()
Ответ на: комментарий от Stahl

Не вижу в этом ничего особенного. У меня нет никаких проблем переключаться с допиливания ядреного драйвера на lua (на котором скриптую тесты юзающие этот драйвер в юзерспейсе), а после 8ми часов такой работы переключиться на жабу, чтобы написать чего-то для телефона, если потребуется (хотя я и не считаю, что знаю java). Или вообще кресты. Еще раз говорю, ты либо умеешь программировать, либо нет.

Единственное на что у меня так с наскоку перепрыгнуть не удается - erlang. Вот у него реально «концепция другая». Но на нем как-то и не доводилось много писать, только праздный интерес.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от Stahl

От тебя много пафоса.

А от тебя много нытья.

Я тебе не верю.

Это взаимно.

ncrmnt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.