Upload
open-academy
View
1.086
Download
0
Embed Size (px)
DESCRIPTION
Aki manapság bárki számára elérhető mobilalkalmazás fejlesztésére adja a fejét, tetemes plusz munkát vállal magára.
Citation preview
Intelligens környezet és
e-technológiák
1
Intelligens környezet és e-technológiák
Multiplatform mobil fejlesztések
Bányász Gábor
BME - Automatizálási és Alkalmazott Informatikai Tanszék
TÁMOP-4.2.1/B-09/1/KMR-2010-0002
Az előadás alapfelvetése
„Desktop alkalmazás fejlesztő vagyok. Kíváncsi
vagyok hogyan lehet alkalmazásokat fejleszteni az
okos mobilokhoz. Hogyan kezdjek hozzá, mire
figyeljek?”
MOBIL PLATFORMOKMelyik platformot válasszam?
Szoftver platformok
• A korai mobileszközökre nem lehetett harmadik félnek szoftvert fejleszteni
• Mára a helyzet megváltozott: nem ritka, hogy egy készülékre akár 3 különféle nyelven is lehet szoftvert írni (pl. natív C++, Java ME, Python)
• Mobil szoftverplatform
• Programozási nyelv
• Kódkönyvtárak
• Fejlesztőeszközök (SDK, emulátor)
C nyelv
• Symbian
• Maemo (GTK+)
• Android (fejlesztői könyvtárak)
Csökken a támogatottsága, a C++ leváltja
Objective C nyelv
• iOS
A Mac OS X fejlesztők használhatják a jól bevált
eszközöket: XCode, Interface Builder
C++ nyelv• Symbian
• Natív (egyéni)
• Open
• Maemo/MeeGo
• Bada
• Natív (egyéni)
• Android (fejlesztői könyvtárak)
C#, VB, .NET compact fw
• Windows Phone 7 (Silverlight)
• (Symbian)
Java• Java ME (Java Mobile Edition)
• A Java mobilkészülékekre kifejlesztett változata
• A legtöbb mobilkészülék által támogatott
• Kompatibilitási problémák (extension-ök miatt)
• Módosított Java
• Android (Dalvik JVM)
• BlackBerry (RIM API)
Python
• Symbian
• Maemo/MeeGo
• Portok léteznek további mobil platformokra is
JavaScript, CSS, HTML
• WebOS (HP)
• A többi platformon web browser
CROSS-PLATFORM
MEGOLDÁSOK
Ha egyszerre több platformra fejlesztenénk
Flash lite
• Flash mobilokra optimalizált verziója
• Android, iOS, BlackBerry Tablet OS
• Alapvetően UI készítésre, de képes elérni a készülék
bizonyos alacsonyszintű funkcióit is
• Gyakran lassúcska a vektoros grafika miatt
Qt• C++
• Platformok
• Asztali platformok
• Linux, Windows, Mac OS X
• Beágyazott platformok
• Embedded Linux, Windows CE, QNX, VxWorks
• Mobil platformok
• Symbian, Maemo/MeeGo, Android (alpha)
• Képes elérni az eszközök alacsony funkcióit is
MoSync
• C, C++
• Platformok
• Android, iOS, Symbian, MeeGo, Java ME
• Az alacsony szintű funkciók elérhetősége
platformonként változó
Platformok elterjedtsége
• Elterjedtek:
• Android(33%), Symbian(31%), iOS(16%),
RIM(14%)
• Feltörekvők
• Windows Phone, Maemo/MeeGo, Bada, webOS
A Symbian, a Windows
Phone, és a MeeGo jövője
ÁTTÉRÉS DESKTOPRÓL
Mire kell odafigyelnie egy desktop fejlesztőnek mobilon?
Desktop - mobil különbségek
• Bemeneti lehetőségek
• Erőforrások
• Egyéb eltérések
Bemeneti lehetőségek• Érintő képernyő nem egér
• Csak bal klikk
• Nincs egér mozgás
• Nehéz célzás
• Multitouch
• Gombok
• Néhány, főként rendszer funkciókhoz
• Billentyűzet
• Ha van, akkor is korlátozott
Erőforrások
• Számítási teljesítmény
• Memória
• Háttértár
• Akkumulátor
• Hosszú számítások, folyamatos kommunikáció
szívják el az energiát.
• A kommunikáció pénzbe kerül
Egyéb eltérések
• Azonos fejlesztő platform esetén is adódnak eltérések
• Általában kezelhetőek és egységes maradhat a forrás
ESETTANULMÁNY
DESKTOP - MOBIL VÁLTÁSRA
Mennyire cross az a cross-
platform?
• Qt-val a cross-platform egyszerű
• Az SDK-val lefordítjuk a cél platformra
• A Qt lib automatikusan kezeli a megjelenést
Maemo - QtCreator
(MADDE)
Qt desktop - Maemo
eltérések 1/4
• Új elemek
• Edit Bar
• Információs sávok: Note, Banner
• Picker Button
• Stacked Windows
Qt desktop - Maemo
eltérések 2/4
• A desktop window managerhez képest megkötések
vannak:
• Nincs átlátszó ablak
• Az ablakok mérete normál vagy teljes képernyős
• Tájkép és portré mód
Qt desktop - Maemo
eltérések 3/4
• Nem mindent widget van adaptálva, csak az
általánosabbak
• Az általános dialógus ablakok hiányoznak
• Egy szintű menü
• Kinetikus scroll
Qt desktop - Maemo
eltérések 4/4
• Qt Mobility
• Mobilspecifikus funkciókat tömörítő API-k
• Sok funkció desktop operációs rendszeren is
használható
• Messaging, Multimedia, Publish and Subscribe,
…
Mobility 1.1 részei (1/2)API Framework Leírás
BearerManagement
A telefon hálózati kapcsolat menedzselő API
Camera Fotók, videó készítése, vaku, zoom állítása
Contacts Contact (címtár) adatok lekérése helyi vagy távoli tárolóból
DocumentGallery
Dokumentumok metaadat alapján történő keresése, böngészése
Feedback A vibramotor és a piezo (tactile) rezgő visszajelzések kezelése
Location Helymeghatározáshoz, POI-k kezeléséhez, térkép és navigációkezeléséhez szükséges gyűjtemény
Maps /Navigation
Térképek és útvonal információk elérése, térképek mozgatása,jelzések elhelyezése
Mobility 1.1 részei (2/2)API Framework Leírás
Messaging A különböző üzenetkezelési lehetőségek elérése (SMS, MMS, e-mail)
Multimedia Média felvétele, visszajátszása, rádió
Organizer Naptár, ütemezés, személyes adatok (feljegyzések, napló/blog)elérése lokális vagy távoli szolgáltatóktól
Publish andSubscribe
A Publish and Subscribe API, a Value Space segítségével, lehetővéteszi különböző célra értékek eltárolását, visszaolvasását, illetvefeliratkozást az érték megváltozására.
Sensor Hozzáférés a HW szenzorokhoz, az eszköz orientáció érzékelése
ServiceFramework
Különböző célú szolgáltatások felfedezésére és használatáraszolgáló általános API
SystemInformation
A rendszerinformációk lekérdezése és értesítés kérése
Versit Versit dokumentumok (vCard, iCal) kezelése.
GYAKORLATI PÉLDA
Mit alkotunk?
Mivel?
Létrehozunk egy projektet
Létrehozunk egy Widgetet
Megadjuk a megjelenésétvoid MyWidget::paintEvent(QPaintEvent*)
{
QPainter p(this);
…
qreal deg1 = state * 2 * M_PI;
drawThing(p, c + QPointF(c.x() * 0.6 * qSin(deg1), c.y() * 0.6 * qCos(deg1)), r,
Qt::red, 0.55 + 0.45 * qCos(deg1));
…
}
void MyWidget::drawThing(QPainter& p, const QPointF& center, qreal r, QColor
color, qreal opacity)
{
QRadialGradient g(center, 10);
g.setSpread(QGradient::RepeatSpread);
g.setColorAt(0.0, Qt::white);
g.setColorAt(1.0, color);
p.setBrush(g); p.setOpacity(opacity);
p.drawEllipse(center, r, r);
}
Hozzáadjuk az animációtMyWidget::MyWidget(QWidget* parent) :
QWidget(parent)
{
state = 0;
pTimeLine = new QTimeLine(3000, this);
pTimeLine->setCurveShape(QTimeLine::LinearCurve);
connect(pTimeLine, SIGNAL(valueChanged(qreal)), this,
SLOT(doAnim(qreal)));
}
void MyWidget::doAnim(qreal v)
{
state = v;
update();
}
void MyWidget::mousePressEvent(QMouseEvent*)
{
if(pTimeLine->state() != QTimeLine::Running) pTimeLine->start();
}
Forgás irány beállításaHeader:
…
public slots:
void slotForward(int forward);
…
Forrás:
void MyWidget::slotForward(int forward)
{
if(forward == Qt::Unchecked)
{
pTimeLine->setDirection(QTimeLine::Backward);
}
else
{
pTimeLine->setDirection(QTimeLine::Forward);
}
}
Összeállítjuk a felületet
Bekötjük a szignálokat
Lefordítjuk a platformokra