TECH AND TOOLS MOBILE APPLICATION DEVELOPMENT USING QT MOBILE APPLICATION DEVELOPMENT USING QT AGENDA
1. Mobile OS for users and developers 2. Technologies overview 3. Introducing Qt 4. Tools 5. General project structure and qmake MOBILE APPLICATION DEVELOPMENT USING QT MOBILE DEVICE FOR USERS
…?
Market: 1.5 billion devices per year MOBILE APPLICATION DEVELOPMENT USING QT MOBILE DEVICE FOR USERS
Communication: phone, messages Multimedia capture and playing Browser Date/time: watch, alarm clocks, reminders, calendar Personal digital assistant Games Toy for geeks The need to constantly take care of charge level and signal strength Market: 1.5 billion devices per year MOBILE APPLICATION DEVELOPMENT USING QT MOBILE OS FOR USERS
…? MOBILE APPLICATION DEVELOPMENT USING QT MOBILE OS FOR USERS
iOS / Apple www.apple.com/ios Focus on UX, marketing and services Software that controls Nice looking UI and expensive devices the device Android / Google www.android.com Firmware The most widespread mobile OS (> 80%) Toolbox for Huge number of apps and a lot of advertising device management Sailfish OS / Jolla sailfishos.org Joy for geeks Gesture oriented UX, full multitasking User community Respect for the data privacy Sailfish Mobile OS RUS omprussia.ru ● B2B and B2G, MDM features and Russian GOSTs MOBILE APPLICATION DEVELOPMENT USING QT IOS HISTORY 1988 — NeXTSTEP beta 2001 — OS X 10.0 2007, January 9 — iPhone 2G presentation at Macworld Conference & Expo 2007, June — iPhone 2G release with iPhone OS 2007, September — iPod touch announce 2008, July 10 — iOS App Store opening with 500 applications 2010, January 12 — iPad announce 2010, June — iPhone OS rebranding as iOS MOBILE APPLICATION DEVELOPMENT USING QT ANDROID HISTORY
2003, October — Android Inc. foundation by Andy Rubin, Rich Miner, Nick Sears, and Chris White 2004 — orientation to mobile devices 2005, July — Google acquires Android Inc. for at least $50 million 2005, November 5 — Open Handset Alliance created 2008, September 23 — HTC Dream with Android 1.0 2009, April — screen rotation, video capture, widgets, screen keyboard and cupcake codename 2010, January — Nexus One MOBILE APPLICATION DEVELOPMENT USING QT SAILFISH OS HISTORY
Maemo Mer Sailfish Mobile OS RUS Nokia MerProject Открытая Мобильная Платформа
Sailfish OS Jolla
Moblin MeeGo Intel Nokia + Intel
2007 2010 2012 2016 MOBILE APPLICATION DEVELOPMENT USING QT MOBILE DEVICE FOR DEVELOPERS
…? MOBILE APPLICATION DEVELOPMENT USING QT MOBILE DEVICE FOR DEVELOPERS
Operating system Technical specifications Multimedia features Network connections Available sensors Target audience The need to constantly take care of energy consumption and available networks MOBILE APPLICATION DEVELOPMENT USING QT MOBILE OS FOR DEVELOPERS
…? MOBILE APPLICATION DEVELOPMENT USING QT MOBILE OS FOR DEVELOPERS iOS XNU hybrid kernel Architecture POSIX-compatible Darwin components UI/UX Apple infrastructure API Android Development tools Linux kernel with bionic library for HAL and userspace Documentation Java bytecode in virtual machine, native API Publication tools Google infrastructure Developer community Sailfish OS Full-featured Linux Licenses Bionic library for HAL, POSIX-compatible userspace Independent portable infrastructure MOBILE APPLICATION DEVELOPMENT USING QT IOS/MACOS ARCHITECTURE
xakep.ru/2014/10/08/kau-ustroena-ios/ MOBILE APPLICATION DEVELOPMENT USING QT ANDROID ARCHITECTURE
developer.android.com/guide/platform/ MOBILE APPLICATION DEVELOPMENT USING QT SAILFISH OS ARCHITECTURE
SILICA COMPONENTS MULTIMEDIA VIRTUAL KEYBOARD GSTREAMER, PULSEAUDIO... MALIIT QT 5
CONNECTIVITY CONNMAN, OFONO, WPA_SUPPLICANT, BLUEZ, OBEXD, USB-MODED...
SYSTEM LIBRARIES SYSTEMD, DBUS, MCE, DSME, NGFD, TIMED, OHMD, SENSORD, STATEFS, SOCIALD, TRACKER, DCONF, ONESHOT, UDEV...
GRAPHICS ESSENTIALS SOFTWARE MANAGEMENT WAYLAND GLIBC, LIBSTD++… RPM, LIBZYPP, PACKAGEKIT
LIBHYBRIS NATIVE SAILFISH ANDROID HAL PHONE (RIL), SENSORS, GRAPHICS, NFC, KERNEL, BT, DROID-HAL-INIT AUDIO, (OPENGL ES) CAMERA, VIDEO BATTERY, WLAN
sailfishos.org/wiki/Architecture MOBILE APPLICATION DEVELOPMENT USING QT TECHNOLOGIES OVERVIEW
OS specific technologies Android: Android Studio (Java, C/C++, Kotlin) developer.android.com/studio iOS: Xcode (Objective-C, Swift) developer.apple.com Sailfish OS: Sailfish OS SDK (C/C++, QML, Python) sailfishos.org/wiki/Application_Development Cross-platform technologies MOBILE APPLICATION DEVELOPMENT USING QT CROSS-PLATFORM TECHNOLOGIES
WEB-based frameworks (JavaScript, HTML 5, CSS) React Native facebook.github.io/react-native jQuery Mobile jquerymobile.com PhoneGap phonegap.com Bootstrap getbootstrap.com Common WEB technologies, low entry threshold, quick development Low productivity, some API limitations Xamarin (C#) visualstudio.microsoft.com/xamarin Common .NET technologies Mono as one more virtual machine in runtime Qt (C++, QML, JavaScript) www.qt.io Efficient native applications with declarative UI MOBILE APPLICATION DEVELOPMENT USING QT QT AS A POPULAR FRAMEWORK Developer community is more than 1 000 000 MOBILE APPLICATION DEVELOPMENT USING QT QT HISTORY 1991 — Quasar Technologies (Trolltech in the future) starts Qt dev for Unix and Windows 1995, May 20 — Qt 0.90 release under Qt Free Edition License 1998, July 12 — KDE 1.0 release, Qt license changes to Q Public License 2000 — Qt/X11 2.2 release under the GPL v2 2001 — Qt 3.0 release with Mac OS X support 2005, June — Qt 4.0 release with full support for free software 2008, June 17 — Nokia acquires Trolltech 2009, January 14 — Qt 4.5 release with LGPL option 2010, June 23 — Nokia Qt SDK 1.0 release with S60 and Maemo support 2011, March — Nokia sales Qt licensing and services to Digia to support mobile platforms 2012, Audust — Digia acquires Qt from Nokia 2012, October — Qt 5.0 release with hw-accelerated graphics, major role of QML and JS 2013, November 27 — Qt-based Sailfish OS 1.0.0.5 release 2014, September — Digia creates Qt Company 2016, May — Qt Company is independent from Digia, Qt 5 moved to open governance MOBILE APPLICATION DEVELOPMENT USING QT QT CONCEPTS
Code less, create more, deploy everywhere Abstraction of the GUI Platform-oriented UI/UX Common business logic Signals and slots A convenient way to send and process information about events Ability to monitor the value of properties Metaobject compiler Interprets macros from the C++ code as annotations Generates added source code with meta information Provide programming features not available natively in C++ MOBILE APPLICATION DEVELOPMENT USING QT QT MODULES
QT ESSENTIALS Qt Add-Ons Qt Network Qt Core Qt Quick Controls 2 Active Qt Qt Speech Authorization Qt GUI Qt Quick Dialogs Qt 3D Qt NFC Qt SVG Qt Multimedia Qt Quick Layouts Qt Android Extras Qt Platform Headers Qt UI Tools Qt Multimedia Widgets Qt Quick Test Qt Bluetooth Qt Positioning Qt WebChannel Qt Network Qt SQL Qt Canvas 3D Qt Print Support Qt WebEngine Qt QML Qt Test Qt Concurrent Qt Purchasing Qt WebSockets Qt Quick Qt Widgets Qt D-Bus Qt Quick Controls Qt WebView Qt Gamepad Qt Quick Extras Qt Windows Extras Qt Graphical Effects Qt Quick Widgets Qt X11 Extras Qt Help Qt SCXML Qt XML Qt Image Formats Qt Sensors Qt XML Patterns Qt Location Qt Serial Bus Qt Wayland Qt Mac Extras Qt Serial Port Compositor
doc.qt.io/qt-5/qtmodules.html MOBILE APPLICATION DEVELOPMENT USING QT QT API FOR MOBILE SOFT
UI elements and controls Models and views File system Databases Multimedia playing and capture Geolocation and coordinates Sensors Network connections Interaction of applications and OS services Multithreading MOBILE APPLICATION DEVELOPMENT USING QT QT FOR MOBILE PLATFORMS
Qt SDK: www.qt.io/download (build tools for host OS) Qt for Android: doc.qt.io/qt-5/android-support.html Qt SDK Android SDK Tools: developer.android.com/sdk/index.html Android NDK: developer.android.com/ndk Java SE DK: www.oracle.com/technetwork/java/javase/downloads Qt for iOS: doc.qt.io/qt-5/ios-support.html Qt SDK Xcode: itunes.apple.com/us/app/xcode/id497799835 Sailfish OS Sailfish OS SDK: sailfishos.org/wiki/Application_SDK_Installation MOBILE APPLICATION DEVELOPMENT USING QT QT SDK COMPONENTS Qt Creator IDE Build tools and targets Source code analizers Qt Linguist Qt Designer Documentation and context help Examples and guides Emulator (Sailfish OS SDK, Android SDK) Qt QML Live (Sailfish OS SDK) MOBILE APPLICATION DEVELOPMENT USING QT QT CREATOR MODES
Welcome: resent projects, examples, tutorials
Edit: source code editor
Design: visual UI editor
Debug: additional view with current step and variable values
Projects: build and run settings
Sailfish OS: Sailfish OS specific settings
Help: documentation MOBILE APPLICATION DEVELOPMENT USING QT BUILD AND RUN TOOLS
Build and targets settings
Run, debug and build
Sailfish OS Build Engine status and management
Sailfish OS Emulator status and management MOBILE APPLICATION DEVELOPMENT USING QT CREATE OR OPEN PROJECT
From basic template Welcome → Projects → New Project →
In Sailfish OS SDK project files must be in user home directory or alternate directory specified during SDK installation MOBILE APPLICATION DEVELOPMENT USING QT PROJECT TYPES
Application Library Other Qt Console C++ Library Unit Test Qt Widgets Qt Quick 2 Extension Plugin Auto Test Qt Quick Qt Creator Plugin Subdirs Empty, Scroll, Stack, Swipe, Empty qmake Canvas 3D Sailfish OS Qt Quick Application Sailfish OS Qt Quick Application (QML Only) MOBILE APPLICATION DEVELOPMENT USING QT BUILD PROJECT
Select Kit Target platform Target architecture Select Build type Debug Profile Release Run build MOBILE APPLICATION DEVELOPMENT USING QT RUN APPLICATION
1. Select target device or emulator 2. Select deploy method Deploy as installation package Deploy by copying binaries 3. Execute Run Debug MOBILE APPLICATION DEVELOPMENT USING QT CONNECT DEVICE
1. Tools → Options → Devices → Add 2. Select device type 3. Start Wizard 4. Physical Device, OK MOBILE APPLICATION DEVELOPMENT USING QT ANDROID SDK SETUP
Tools → Options → Devices → Android Settings Java SE Development Kit Android SDK Tools developer.android.com/sdk/index.html Android NDK developer.android.com/tools/sdk/ndk/in dex.html Tools SDK Manager Install components AVD Manager Setup emulators doc.qt.io/qt-5/androidgs.html MOBILE APPLICATION DEVELOPMENT USING QT QT QML LIVE (SAILFISH OS ONLY)
Update QML UI with no need to rebuild
1. Activate Qt QML Live Projects →
qmllive-sailfish package is needed on device MOBILE APPLICATION DEVELOPMENT USING QT CONTROL BUILD ENGINE (SAILFISH OS ONLY)
Special Qt Creator mode WEB interface http://localhost:8080 Install targets Control libraries Update packages Test RPM packages MOBILE APPLICATION DEVELOPMENT USING QT BUILD ENGINE CLI (SAILFISH OS ONLY) ssh mersdk@localhost -p 2222 -i
Host system ditectories User home: /home/mersdk/share Alternate projects directory: /home/src1 Install package sb2 -t
Copy package scp -P 2223 -i
Declarative UI description Running with executable using QML code in C ++ QtQuick standard module Main QML file is embedded in Qt Quick Controls 2 or QQuickView Sailfish.Silica for UI components Access to Qt and C++ libs Access to some APIs Low-level access to device API Light logic in JavaScript Heavy calculations MOBILE APPLICATION DEVELOPMENT USING QT PROJECT DIRECTORY
doc.qt.io/qt-5/qmake-variable-reference.html MOBILE APPLICATION DEVELOPMENT USING QT QMAKE GENERATES MAKEFILES FROM PRO-FILES
Constant definitions DEFINES += Q_OS_SAILFISH contains(DEFINES, Q_OS_SAILFISH):message(sailfish os) Platform specific actions android:message(android) ios:message(ios) linux:message(sailfish os as mobile linux) Build options test CONFIG(release, debug|release):message(release build) CONFIG(debug, debug|release):message(debug build) Additional files to install documentation.files = docs/* documentation.path = /usr/local/program/doc INSTALLS += documentation
doc.qt.io/qt-5/qmake-manual.html MOBILE APPLICATION DEVELOPMENT USING QT QMAKE OPERATORS
= — assign value += — append a value to the list += — remove a value from the list *= — append a unique value to the list ~= — replace a value $$ — value axpansion $$[…] — access qmake properties MOBILE APPLICATION DEVELOPMENT USING QT ADDITIONAL QMAKE CONFIG
Projects → Build → Build Steps → qmake → Additional arguments MOBILE APPLICATION DEVELOPMENT USING QT ADDITIONAL INFORMATION
Qt documentation doc.qt.io Sailfish OS Application Development sailfishos.org/wiki/Application_Development Introduction online course sailfish.su/stepik Stack Overflow qml, qt-quick, qt, sailfish-os OPEN MOBILE PLATFORM [email protected]