Realizarea de aplicatii pentru Android utilizand Qt
-
Upload
dragos-tudor-acostachioaie -
Category
Software
-
view
1.024 -
download
3
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