secon.Посиделки #18 — android на qt. Материал Игоря Бочкарева

19
Qt + Android Бочкарев Игорь [email protected] SECON.RU

Upload: -secon2014

Post on 16-Jun-2015

834 views

Category:

Mobile


6 download

TRANSCRIPT

Page 1: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt + Android

Бочкарев Игорь

[email protected]

SECON.RU

Page 2: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

ИсторияQt является кроссплатформенным фреймворком, использующим C++ для создания пользовательских интерфейсов и программного обеспечения.

При помощи Qt можно создавать ПО как минимум для 14 встраиваемых, мобильных и десктоп-платформ с одним исходным кодом.

SECON.RU

Necessitas2009 - 2011

Передача кода в Qt-project2012

Qt 5 + QtCreator 32013

Page 3: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Основные компоненты

SECON.RU

Page 4: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt on Android• Qt-приложение

Набор .so-библиотек с логикой приложения, а также Qt-библиотеки (если они включены в состав пакета)

• Android-загрузчик приложения- AndroidManifest.xml- QtApplication.java – управляет связыванием Android и Qt, загружает

зависимости и само Qt-приложение;- QtActivity.java - основная точка входа приложения, также

управляет загрузкой требуемых библиотек;- aidl-файлы для связывания с сервисом Ministro- Ресурсы

SECON.RU

Page 5: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Процесс загрузки

SECON.RU

Page 6: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Пример создания приложения с нуля

• Установка Android SDK, NDK, Apache Ant 1.9 • Установка Qt 5.3 + QtCreator 3.1• Настройка среды сборки в QtCreator• Создание и сборка первого проекта для платформ Linux и Android• Запуск, отладка• Структура android-проекта, состав файлов, AndroidManifest.xml,

QtApplication, QtActivity• Подписание проекта, формирование APK (Ministro или внедрение

библиотек Qt)• Применение стилей (QSS) для приложения

http://www.kdab.com/qt-android-episode-1/, http://www.kdab.com/qt-android-episode-2/, http://www.kdab.com/qt-android-episode-3/, http://www.kdab.com/qt-android-episode-4/

SECON.RU

Page 7: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Поддержка модулей Qt в Android

Module Qt 5.1 Qt 5.2 Qt 5.3

Qt Core missing system semaphores and shared memory shared memory is on my TODO list

Qt Multimediavideo and audio works, missing

camera supportbrings camera support ATM no other plans

Qt Network missing SSL support brings SSL support ATM no other plans

Qt Quick Controls missing android native style brings android native style ATM no other plans

Qt Quick Controls missing android native style missing android native style on my TODO list

Qt SQL only sqlite is provided by Qt-Project SDK

Qt WebKit & Qt WebKitWidgets, Qt

WebEnginemissing There is hope for Qt WebEngine

Qt Widgets missing android native style brings android native style ATM no other plans

Qt GUI, QML, Quick,Quick Layouts,

Testjust works

SECON.RU

Page 8: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Поддержка модулей Qt в Android (2)

Module Qt 5.1 Qt 5.2 Qt 5.3

Qt Android Extras missingadditional functionality for

development on Android

android services/binder support is on my TODO

list

Qt Bluetooth missing yes

Qt NFC missing on my TODO list

Qt Positioning missing yes

Qt D-Bus missing, android uses the binder IPC.Missing, but as I said Qt will have something

similar for Android

Qt Sensors commonly used sensors more sensors added ATM no other plans

Qt PrintSupport missing, no native print support on Android

Qt OpenGLlimited to one top level widget, can’t mix QGLWidget with other

QWidget(s)

there is hope to use one more top level widget

can mix a single QGLWidget with other

QWidgets

Qt SerialPort missing support added ATM no other plans

Qt Concurrent, Declarative,

GraphicalEffects, ImageFormats,

Script, ScriptTools, SVG, XML,

XMLPatterns

just works

SECON.RU

Page 9: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Нет и неизвестно когда…

• ActionBar“I'm afraid that Qt5.3 will *not* have QToolBar in Action Bar. Neither me(KDAB) nor Digia have enough time to do it :(. Of course,

unless if some needs it so bad and is willing to pay for it :).” Cheers, BogDanЕсть реализация: http://stefanfrings.de/android_qt/AndroidActionBar.zip

• Native Android style BogDan: “Proper Android look&feel for QtQuick will come in 5.4.”

• admob BogDan: “Well, you need to extend QtActivity to do it and to add admob dependency.”

• QtWebKit / QtWebEngineBogdan: “Mostly because QtWebKit requires icu library.”May 13th, 2014 «… we have Qt WebEngine running on the following reference devices: Raspberry Pi model B, Boundary Devices

SABRE Lite, BeagleBone Black, BeagleBone Black, Google Nexus 7» (http://blog.qt.digia.com/blog/2014/05/13/news-from-the-qt-webengine-team/#more-39313)

SECON.RU

Page 10: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Вызов функций через JNI и Qt Android Extras API

• Вызов Java-функций через Qt Android Extras APIQtAndroid Namespace

QAndroidJniObject androidActivity()int androidSdkVersion()void startActivity(….)void startIntentSender(…)

QAndroidJniObject ClassQAndroidActivityResultReceiver Class

• Добавление своего кода в QtActivity.java• Пример с Notification

http://qt-project.org/doc/qt-5/qtandroidextras-module.html

SECON.RU

Page 11: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Портирование Qt-приложений в Android

• перенос проекта с подпроектами– добавление внешних библиотек, собранных под Android

(ANDROID_EXTRA_LIBS в .pro-файле);– создать каталог libs, скопировать библиотеки;– скопировать .jar-файлы.

• Android-сервис на Qt

- добавить <service …. In AndroidManifest.xml;- в QtActivity или BroadcastReceiver добавить создание и старт Android-

сервиса;- реализовать вызов “main()” в потоке через Java Reflection API;- startForeground (…), если требуется постоянная работа процесса.

• Поддержка различных разрешений

- при старте проверять pixleRatio и менять UI (ldpi, mdpi, hdpi, xhdpi, …);- динамически загружать различные файлы ресурсов и QSS.

SECON.RU

Page 12: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

OpenGL + Qt + Android

В Qt5.3 используется OpenGL ES 2.0

http://www.kdab.com/future-qt-android-looks-bright/#more-4742http://www.kdab.com/opengl-in-qt-5-1-part-1/, http://www.kdab.com/opengl-in-qt-5-1-part-2/, http://www.kdab.com/opengl-in-qt-5-1-part-3/, http://www.kdab.com/opengl-in-qt-5-1-part-4/, http://www.kdab.com/opengl-in-qt-5-1-part-5/,http://www.youtube.com/watch?v=AiS53U7XEvw,http://www.youtube.com/watch?v=TzNWqoJRFsc

SECON.RU

Page 13: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt Enterprise Embedded (Qt EE)• Легковесный программный стек на базе Qt 5

для встраиваемых Linux-систем (Qt Quick и Qt Widgets).

• SDK для установки средств для интеграции с оборудованием;

• Инструментарий для развёртывания и запуска приложений на оборудовании;

• Cреда разработки Qt Creator 3.1;• Готовые системные образы для эталонных

устройств• Дополнительные компоненты и базовые

приложения;• Симулятор на базе VirtualBox

http://qt.digia.com/ru-RU/Try-Buy/SECON.RU

Page 14: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt EE. Платформы

SECON.RU

Page 15: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt EE. Платформы (2)  Embedded

AndroidEmbedded Linux

Google Nexus 7 - 1.2 GHz Quad-Core ARM Cortex A9, Tegra 3 GPU, 1GB RAM

Yes No

Beagle Board xM - 1GHz ARM Cortex A8, PowerVR SGX530 GPU, 512MB RAM

Yes Yes

Boundary Devices SabreLite (Freescale i.MX 6) – 1 GHz Quad-Core ARM Cortex A9, Vivante GC2000 GPU, 1GB RAM

Yes Yes

Raspberry Pi – Model B – 700 Mhz ARM11, Broadcom videocode IV @ 250MHz GPU, 512 MB (shared with GPU) RAM

No Yes

BeagleBone Black – TIAM335x 1GHz ARM® Cortex-A8, 512 MB RAM Yes Yes

Boot to Qt Emulator (included in the development environment) Yes Yes

http://www.youtube.com/watch?v=-Sz6UDUK68w, http://www.youtube.com/watch?v=0EpNrFE2hmE

SECON.RU

Page 16: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt CloudServices

• Qt Account• Enginio Data Storage

удаленная СУБД + Qt-API

• WebSockets (https://developer.qtcloudservices.com/mws/getting-started)

SECON.RU

Page 17: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Qt Data Visualization library, Qt Quick Enterprise Controls

SECON.RU

Page 18: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Библиотеки

• The Qt library archivehttp://inqlude.org/

• Реализация «in app purchase» в Android https://blog.qt.digia.com/blog/2013/12/12/implementing-in-app-purchase-on-android/

SECON.RU

Page 19: SECON.Посиделки #18 — Android на Qt. Материал  Игоря Бочкарева

Кто такой BogDan Vatra?

BogDan Vatra

SECON.RU