Realizarea de aplicatii pentru Android utilizand Qt

24
Realizarea de aplicații pentru Android utilizând Qt Dragoş Acostăchioaie http://www.unixinside.org [email protected] Şcoala de vară “Informatică la castel”, Macea, 24 - 30 august 2015

Transcript of Realizarea de aplicatii pentru Android utilizand Qt

Realizarea de aplicații pentruAndroid

utilizând Qt

Dragoş Acostăchioaiehttp://[email protected]

Şcoala de vară “Informatică la castel”, Macea, 24 - 30 august 2015

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce este Qt

Qt. Code less. Create more. Deploy everywhere

✗ Facilitează dezvoltarea de aplicații și interfețe utilizator independente de platformă

✗ Este suportată o largă varietate de platforme desktop, mobile și embedded

✗ Nu este necesară rescrierea codului sursă

✗ Este open-source

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Avantaje de a folosi Qt

✗ un singur cod sursă funcţionează fără modificări pe platforme diferite(write once, run everywhere – vezi şi paradigma de portare a soluţiilor FOSS)

✗ performanţe superioare faţă de limbajele care rulează într-o maşină virtuală (ex Java),fiindcă codul binar se execută nativ, rezultând un consum semnificativ mai redus deresurse

✗ utilizează sistemul grafic al sistemului de operare pe care rulează; astfel, aplicaţiile auaspectul şi comportamentul nativ al sistemului gazdă

✗ trecerea de la un sistem de operare la altul nu necesită modificări ale codului sursă, cidoar compilarea acestuia pe fiecare platformă în parte (dacă nu s-au folositfunctionalităţi/biblioteci specifice)

✗ asigură codul sursă împotriva schimbărilor viitoare ale platformelor gazdă (la nivelsursă sau binar; dezvoltatorii se pot astfel concentra pe dezvoltarea aplicaţiilor, nu pemodificările API-ului)

✗ pot fi atinse mai uşor pieţe multiple (dedicate diferitelor sisteme de operare), cu costurimai mici de mentenanță a codului

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Pe ce platforme rulează Qt

Platforme de tip Desktop

✗ Linux/X11, dar și alte “UNIX flavours” (FreeBSD, Solaris, HP-UX, AIX)✗ Linux/Wayland✗ MacOS✗ Windows

Platforme Mobile

✗ Android✗ iOS✗ BlackBerry

Platforme Embedded

✗ Embedded Android✗ Embedded Linux✗ Windows Embedded, Windows CE, WinRT✗ Real-time operating systems (ex QNX, VxWorks)

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

În ce limbaje putem programa folosind Qt

✗ Limbaje native: C++ și QML

✗ Poate interacționa cu alte limbaje (engl. language bindings): Java (QtJambi), Ruby,C#, C++11

✗ Limbaje de scripting suportate: QML (nativ), JavaScript, Phyton

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce medii integrate sunt compatibile cu Qt

✗ Qt Creator

✗ Eclipse

✗ Microsoft Visual Studio

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate faceQt Creator

✗ Gestiunea proiectului

✗ Editarea codului sursă

✗ Controlul versiunilor

✗ Proiectarea interfeței

✗ Help integrat

✗ Generarea codului binar

✗ Depanarea aplicaţiei

✗ Publicarea aplicației

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate face Qt Creator

Vrăjitor (wizard) pentru proiecte Qt

✗ realizează proiecte noi Qt✗ generează automat proiectul şi fişierele de bază

Editor avansat de cod sursă C++/QML/Javascript

✗ syntax highlighting✗ completare automată a codului✗ marcarea automată a erorilor de sintaxă în timpul editării✗ auto-indentare✗ posibilitatea de expandare/restrângere a funcţiilor✗ căutare incrementală a cuvintelor-cheie în timpul editării✗ comutarea uşoară între declaraţia şi definiţia unei metode✗ posibilitatea de a face semne de carte în cadrul codului sursă✗ posibilitatea de a lucra fără mouse şi de a deschide ferestre de editare multiple

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Proiectarea interfeței utilizator cu Qt Creator

Qt Designer

✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme desktop✗ Se bazează pe editarea de widget-uri și form-uri✗ Permite utilizarea mecanismului de semnale și sloturi✗ Interfața utilizator este salvată în fișiere XML

Qt Quick Designer

✗ Utilizat pentru proiectarea interfeței utilizator a aplicațiilor pe platforme mobile✗ Permite două moduri de lucru, editare și design

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate face Qt Creator

Help pentru biblioteca Qt integrat

✗ poate fi accesat în timpul editării prin poziţionarea pe un cuvânt-cheie

Sistem de compilare a proiectului

✗ prin intermediul sistemului qmake (propriu Qt) sau prin Cmake

Sistem de gestiune a fişierelor din proiect

✗ permite localizarea uşoară a unui fişier din proiect după tipul şi numele acestuia

Sisteme de control al versiunilor

✗ sunt suportate: Git, Subversion (SVN), CVS şi Perforce

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate face Qt Creator

Compilarea aplicației

✗ Sunt suportate gcc şi gdb, precum și Microsoft Visual Studio compiler

✗ Pot fi stabilite individual configurările pentru fiecare platformă în parte și se poate

comuta rapid între platforme

✗ Se pot crea versiuni diferite ale proiectului, pentru a păstra separat codul sursă

dependent de platformă

✗ Generează automat pachetele care vor transferate pe dispozitivul mobil în vederea executării aplicației direct pe acesta

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate face Qt Creator

Depanarea aplicației

✗ pot fi stabilite puncte de întrerupere, rula aplicaţia linie-cu-linie sau instrucţiune-cu-instrucţiune, examina conţinutul variabilelor locale şi globale

✗ Permite depanarea inclusiv a funcțiilor Javascript

✗ Dacă aplicația este testată direct pe dispozitivul mobil sau în emulator, mesajele vor apărea în consola QtCreator

✗ Dacă se stabilesc puncte de oprire (breakpoints), în consola QML/Javascript pot fi executate expresii Javascript

✗ În timpul execuției, poate fi explorată structura obiectelor

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce poate face Qt Creator

Publicarea aplicației✗ Permite crearea pachetelor necesare publicării aplicației pentru dispozitive mobile,

utilizând magazinele de aplicații (Apple Store, Google Play)

Qt Installer

✗ arhitectură care oferă un set de instrumente şi utilitare pentru realizarea de sisteme de instalare ale aplicaţiilor

✗ funcţionează pe Linux, MacOS şi Windows şi au aspectul nativ al platformei utilizate

✗ sistemul de instalare este configurabil, putându-se adăuga noi widget-uri şi crea scripturi pentru a realiza operaţiuni noi

✗ sistemul de instalare poate fi offline (conţin toate componentele necesare) sau online (conţinutul poate fi descărcat de pe un server Web)

✗ oferă şi posibilitatea de actualizare ulterioară a conţinutului aplicaţiei

http://doc.qt.io/qt-5/publishtogoogleplay.html

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Qt are o structură modulară

http://doc.qt.io/qt-5/qtmodules.html

Qt Essentials

✗ Qt Core - provides core non-GUI functionality✗ Qt GUI - provides the basic enablers for graphical applications✗ Qt Multimedia - provides audio, video, radio and camera functionality✗ Qt Network - provides classes to make network programming easier and portable✗ Qt QML - classes for QML and JavaScript languages✗ Qt Quick - provides classes for embedding Qt Quick2 in Qt/C++ applications✗ Qt SQL - provides a driver layer, SQL API layer, and a user interface layer for SQL db✗ Qt Test - classes for unit testing Qt applications and libraries✗ Qt WebKit - provides a web browser engine (WebKit2)✗ Qt Widgets - extends Qt GUI with C++ widget functionality

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Qt are o structură modulară

http://doc.qt.io/qt-5/qtmodules.html

Qt Add-ons

✗ Qt Bluetooth – enables basic Bluetooth operations✗ Qt D-Bus - Inter-Process Communication using the D-Bus protocol (UNIX-only)✗ Qt Graphical Effects - graphical effects for use with Qt Quick 2✗ Qt Image Formats - plugins for additional image formats✗ Qt OpenGL - offers classes that make it easy to use OpenGL✗ Qt Positioning - provides positioning information✗ Qt Print Support - provides classes to make printing easier and portable✗ Qt Sensors - Provides classes for reading sensor data✗ Qt Serial Port - classes that enable access to a serial port✗ Qt Script - provides classes for making Qt applications scriptable✗ Qt Script Tools✗ Qt SVG - provides functionality for handling SVG images✗ Qt XML - implementations of SAX and DOM✗ Qt XML Patterns - support for XPath, XQuery, XSLT and XML schema validation

Dragoş Acostăchioaie - http://www.unixinside.org

✗ Permite execuția de aplicații Qt5 pe dispozitive care rulează Android v2.3.3 sau mai nouă

✗ Sunt suportate toate modulele Qt, exceptând Qt WebKit, Qt NFC, Qt SerialPort și cele specifice unor platforme (Qt MacExtras, Qt WindowsExtras, Qt X11Extras)

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce este Qt pentru Android

http://doc.qt.io/qt-5/android-support.html

Dragoş Acostăchioaie - http://www.unixinside.org

✗ Android SDK Tools (instrumente pentru dezvoltarea și depanarea de aplicații Android)

✗ Android NDK (permite dezvoltarea de cod pentru Android in C/C++)

✗ Apache Ant v1.8 sau mai nouă (instrumente pentru generarea de aplicații Android)

✗ Java SE Development Kit (JDK) v6 sau mai nouă. Pe Linux putem utiliza și OpenJDK

✗ pe Windows, este necesar și Android Debug Bridge (ADB) driver

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Ce ne trebuie

http://doc.qt.io/qt-5/androidgs.html

Dragoş Acostăchioaie - http://www.unixinside.org

✗ Executare direct pe dispozitiv. Consola de mesaje se va regăsi în QtCreator. Înainte de conectarea prin USB a dispozitivului, trebuie activat USB Debugging pe acesta

✗ Executare pe calculator. Poate fi aleasă platforma pe care se compilează/execută proiectul.

✗ Executare în emulator Android. În prealabil trebuie creat un AVD (Android Virtual Device) și stabilite proprietățile dispozitivului virtual.

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Cum executăm aplicația Android

doc.qt.io/qtcreator/creator-developing-android.html

Dragoş Acostăchioaie - http://www.unixinside.org

#include <QApplication>#include <QQmlApplicationEngine>#include <QQmlContext>#include "background.h"

int main(int argc, char *argv[]){ QApplication app(argc, argv);

QQmlApplicationEngine engine; // încărcare componentă vizuală engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

Background backgrd; // expunere C++ la QML engine.rootContext()->setContextProperty("app", &backgrd);

return app.exec();}

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Exemplu de aplicație Android

Dragoş Acostăchioaie - http://www.unixinside.org

#ifndef BACKGROUND#define BACKGROUND

#include <QObject>

class Background : public QObject{ Q_OBJECTpublic: inline Background(QObject *parent = 0) : QObject(parent) { } // apelabilă din QML Q_INVOKABLE inline bool autentificare(const QString &nume, const QString &parola) { return (nume == "admin" && parola == "admin"); }};

#endif // BACKGROUND

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Exemplu de aplicație Android

Dragoş Acostăchioaie - http://www.unixinside.org

import QtQuick 2.4import QtQuick.Controls 1.3import QtQuick.Window 2.2import QtQuick.Dialogs 1.2import QtQuick.Layouts 1.1

ApplicationWindow { title: "Autentificare" width: 640 height: 480 visible: true

MessageDialog { id: dialog title: "Mesaj" icon: StandardIcon.Question // proprietate atașată (binding) - se actualizează la schimbarea valorii text: "Rezultat autentificare: " + rez standardButtons: StandardButton.Ok property string rez }

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Exemplu de aplicație Android

Dragoş Acostăchioaie - http://www.unixinside.org

function afisareRezultat(stare) { dialog.rez = stare dialog.open() }

GridLayout { anchors.centerIn: parent columns: 2 rows: 4 Text { text: "Autentificare" Layout.columnSpan: 2 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter }

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Exemplu de aplicație Android

Dragoş Acostăchioaie - http://www.unixinside.org

Text { text: "Nume:" } TextField { id: numeEdit } Text { text: "Parola:" } TextField { id: parolaEdit; echoMode: TextInput.Password } Item { Layout.fillWidth: true } Button { text: "OK" Layout.alignment: Qt.AlignRight | Qt.AlignVCenter onClicked: { var result = app.autentificare(numeEdit.text, parolaEdit.text) afisareRezultat(result ? "Succes" : "Esuata") } } }}

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Exemplu de aplicație Android

Dragoş Acostăchioaie - http://www.unixinside.org

Şcoala de vară “Informatică la castel”, Macea, 24-29 august 2015

Resurse

✗ Qt documentation - http://qt-project.org/doc/

✗ Mark Summerfield books - http://www.qtrac.eu/marksummerfield.html

✗ Learning Qt videos - https://www.ics.com/learning/icsnetwork