Приветствую!
Есть написанная библиотека (so) на QT под Андроид. Хочется, чтобы разработчик, использующий Android Studio и соответственно Java мог с ней работать. Библиотека своя, так что можно с ней делать, что угодно.
В принципе, код в библиотеке планируется запускать как сервис (служба)
Как наиболее просто осуществить это взаимодействие?
Как собрать это в Android Studio вместе в один пакет?
Здравствуйте, Nevidim, Вы писали:
N>Есть написанная библиотека (so) на QT под Андроид. Хочется, чтобы разработчик, использующий Android Studio и соответственно Java мог с ней работать.
Что подразумевается под "работать"? Он будет править C++/QML или просто использовать готовую ".so"
в бинарном виде?
Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, Nevidim, Вы писали:
N>>Есть написанная библиотека (so) на QT под Андроид. Хочется, чтобы разработчик, использующий Android Studio и соответственно Java мог с ней работать.
Z>Что подразумевается под "работать"? Он будет править C++/QML или просто использовать готовую ".so" Z>в бинарном виде?
Нет конечно, не править. Использовать в бинарном виде.
Здравствуйте, Nevidim, Вы писали:
N>Здравствуйте, Zhendos, Вы писали:
Z>>Здравствуйте, Nevidim, Вы писали:
N>>>Есть написанная библиотека (so) на QT под Андроид. Хочется, чтобы разработчик, использующий Android Studio и соответственно Java мог с ней работать.
Z>>Что подразумевается под "работать"? Он будет править C++/QML или просто использовать готовую ".so" Z>>в бинарном виде?
N>Нет конечно, не править. Использовать в бинарном виде.
Не очень понятно как он сможет это сделать без Java/JNI обертки,
но не важно, вообще добавить ".so" в apk очень просто, положите его
сборки под разные архитектуры в
app/src/main/libs/armeabi
и
app/src/main/libs/arm64
и все:
Вот пример более сложного правила gradle
где библиотека на языке Rust сначала собирается,
а потом уже в нужную директорию копируется:
вызов cargo для сборки Rust можно заменить на qmake/make с правильными
аргументами и все будет работать прямо по нажатию Run/Build в Android Studio.
Другой вопрос что этого нифига не хватит, кроме вашей библиотеки ведь нужно еще всякие libQtCore/QtGui и т.д.
Самый простой путь, раз у вас есть готовое приложение на Qt для Android,
это открыть его apk (это ведь всего лишь zip файл) и скопировать из его папки lib все что нужно
и положить в app/src/main/libs/
Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, Nevidim, Вы писали:
N>>Здравствуйте, Zhendos, Вы писали:
Z>>>Здравствуйте, Nevidim, Вы писали:
N>>>>Есть написанная библиотека (so) на QT под Андроид. Хочется, чтобы разработчик, использующий Android Studio и соответственно Java мог с ней работать.
Z>>>Что подразумевается под "работать"? Он будет править C++/QML или просто использовать готовую ".so" Z>>>в бинарном виде?
N>>Нет конечно, не править. Использовать в бинарном виде.
Z>Не очень понятно как он сможет это сделать без Java/JNI обертки, Z>но не важно, вообще добавить ".so" в apk очень просто, положите его Z>сборки под разные архитектуры в Z>app/src/main/libs/armeabi Z>и Z>app/src/main/libs/arm64 Z>и все:
Z>Вот пример более сложного правила gradle Z>где библиотека на языке Rust сначала собирается, Z>а потом уже в нужную директорию копируется:
Z>https://github.com/Dushistov/rust_swig/blob/15ab3bd3b88ef17c450ac3acc9a8ca482d4df534/android-example/app/build.gradle#L73
Z>вызов cargo для сборки Rust можно заменить на qmake/make с правильными Z>аргументами и все будет работать прямо по нажатию Run/Build в Android Studio.
Z>Другой вопрос что этого нифига не хватит, кроме вашей библиотеки ведь нужно еще всякие libQtCore/QtGui и т.д.
Z>Самый простой путь, раз у вас есть готовое приложение на Qt для Android, Z>это открыть его apk (это ведь всего лишь zip файл) и скопировать из его папки lib все что нужно Z>и положить в app/src/main/libs/
Благодарю!
А эти вот дополнительные библиотеки, их надо обязательно подгружать в Java через LoadLibrary или они каким то образом могут подгружаться автоматически?
Здравствуйте, Nevidim, Вы писали:
N>А эти вот дополнительные библиотеки, их надо обязательно подгружать в Java через LoadLibrary или они каким то образом могут подгружаться автоматически?
Обычно хватает "главную" библиотеку подгрузить, то есть вашу библиотеку,
а там уже динамический линковщик, пройдется по ее заголовку и подгрузит зависимости,
типа libQtCore и т.п.,
но в Qt могут быть разные хитрости, например может быть какой-то плагин
для работы с Android нужно раньше всех загрузить,
но у вас же есть готовый рабочий пример, ваш проект Qtшный проект,
где-то там в его недрах есть java файлы, в которых написано как правильно вызывать System.loadLibary
для вашей ".so", ну или в исходниках Qt можно подсмотреть.