Qt und Bada - die Unterschiede

2010-07-16 20:23


Qt und Bada, beides Plattformen für die mobile Entwicklung, doch wo sind die Unterschiede?
Ursprünglich wollte ich nur wissen, wo sich die Funktionen von Qt Mobility in Bada wiederfinden, dabei fiel mir auf, dass auch viele anderen Dinge erwähnenswert sind, und ein Vergleich zwischen Qt Mobility und der Bada API zu kurz gegriffen wäre. Auch wurde mir dabei klar, das zurzeit ein Vergleich wohl unfair wäre, ist Qt doch schon deutlich länger am Markt und hat auch durch die Unterstützung nicht mobiler Plattformen gewisse Vorteile für Programmierer. Bada würde also hier nicht wirklich viel gewinnen können. Bada bietet eine vollständiges Framework für die Mobile Entwicklung, mit GUI, Backendklassen, Collections und vielem mehr, genauso wie Qt dies tut.

Plattformen


Der deutlichste Unterschied zwischen Bada und Qt liegt wohl in den von ihnen unterstützen Plattformen. Während Qt hier im mobilen Bereich Symbian und MeeGo/Maemo anbietet, und ebenfalls noch Linux, Windows und Mac kann, ist Bada einzig für die mobile Umgebung ausgelegt. Zurzeit gibt es mit dem Wave ein erstes Handset, weitere werden folgen. Qt bietet hier die breitere Unterstützung, und ist generell etwas fortgeschrittener, da es auch schon länger als solches existiert und im Industriebereich zur Zeit wohl als C++ Standard gelten kann. Dennoch muss sich zeigen, welche Vorteile ein solches "Schweizer Taschenmesser" im mobilen Bereich hat. Sind doch auch die APIs von Android und IPhone an ihre Plattform gebunden. Der Erfolg von Qt Mobility und Bada wird also wohl sich vorallem an den verkauften Handsets messen lassen müssen und der Profitabilität von Apps in den jeweiligen Plattformstores.

API


Qt hat mit Qt Mobility eine API welche die mobilen Services ansprechen kann, GUI und ähnliches wird dann wieder über Standard-Klassen von Qt geregelt. Das hat den Vorteil, das viele Qt Programme ohne große Anpassung auch für die mobilen Plattformen kompilieren. Angepasst sollte aber wohl die UI werden, da PC Programme in der Regel nicht für so kleine Bildschirme ausgelegt sind. Dennoch kann auch hier das Layoutkonzept von Qt überzeugen, man benötigt nicht für jedes Endgerät zwangsweise auch ein neues Layout.
Im Bada SDK ist dies der erste große Unterschied der mir auffiel: Es gibt keine Layoutklassen, wie in Qt. Alles muss im GUI Editor also Fix positioniert werden, oder bei bedarf zur Laufzeit arangiert. Dazu kommt das man 2 Ansichten designen muss, für Landscape und Portrait.

Eine kurze Gegenüberstellung der Namespaces aus Qt Mobility mit denen von Bada sorgt für weitere Klarheit:

Qt mobility Namespace Namespace in Bada
Bearer Management Net
Net::Bluetooth
Net::Wifi
Net::Sockets
Net::Http
Telephony
Contacts Social
Social::Services
Location Locations
Locations::controls
Locations::Services
Messaging Messaging
evtl. auch Telephony
Multimedia Media
Publish n Subscribe Unklar, Bada verfolgt hier wohl andere Konzepte
Service Framework System
Telephony
System Information System

Diese Tabelle habe ich aus einem ersten Vergleich ermittelt, sie ist daher evtl. an einigen Stellen unvollständig. Auch habe ich auf ein Mapping der unterschiedlichen Klassen verzichtet.

Konzeptionell gibt es auch einen sehr wichtigen Unterschied, nämlich wie Events behandelt werden. In Bada verwendet man einen Interface Ansatz, so das man jeweils von einer Art Listener ableitet und dann die entsprechende Methode implementiert. Das führt zur einer bedingten Mehrfachvererbung, woraus sich jedoch keine Konflikte ergeben sollten. Allerdings gibt es damit auch das Problem, das man nicht für jedes Event eine eigene Methode haben kann, so ist der Code für einen Button in der Methode OnActionPerformed unterzubringen, in einem switch, wo jeweils die korrekte Id angesprungen wird. Jeder Button muss sich davor noch als Listener registrieren.
Qt setzt hier auf Signals und Slots. Finde ich etwas eleganter, allerdings kann man auch in Bada ähnliche Konzepte umsetzen, hier ist generell etwas mehr Handarbeit nötig.
Ebenfall hatte ich schon dass fehlen von Layoutklassen erwähnt, welches eigentlich schade ist. So muss man für jedes Bada Modell eigens eine Oberfläche designen, wobei die Elemente nur einmal auf die Form gezogen werden müssen, aber jeweils für Landscape und Portrait Mode platziert und ggf. in der Größe angepasst werden müssen.

Entwicklungsumgebungen

Beide Plattformen besitzen eine eigene IDE, welche jeweils mit dem SDK ausgeliefert wird. QtCreator für Qt, sowie die Bada IDE für Bada. Nokia hat für Qt insgesamt eine eigene IDE erstellt, welche mit der Version 2.0 nun auch entgültig die mobilen Plattformen von Qt unterstützt. Samsung hat sich bei der IDE für eine Eclipse basierte Lösung entschieden, allerdings ist die IDE eigenständig, und integriert sich nicht in eine Eclipseinstallation als Plugin.
Der GUI Designer für Bada in der IDE hat mich dann auch bewogen, einen eigenen mit Qt anzufangen, denn hier bieten andere IDEs wesentlich mehr Komfort. Allerdings ist die gesamte IDE wohl zur Zeit auch als Beta anzusehen, so das sich hier noch viel verbessern kann. Insgesamt wirkt der QtCreator etwas runder und durchdachter, allerdings sollte man hierbei beachten, das die Bada IDE noch nicht in der Version 2.0 angekommen ist. (afaik nicht mal 1.0 ;))
Die Simulatoren beider IDEs sind akzeptabel, wobei ich im QtCreator nie ganz sicher bin, ob es nicht doch nur ein Skin über dem Programm ist. Funktional bietet Bada hier im Simulator ähnliches wie Qt:

tl_files/codenode/badasdk/bada_wave_sim_h.png   tl_files/codenode/qtmobilesdk/qt_nokia_n900_sim_v.png
Die Simulatoren in der direkten Gegenüberstellung    

Der Simulator des Bada SDK wird eher wie ein richtiges Telefon, besitzt sogar die Möglichkeit das Telefon rudimentär zu bedienen. Im Qt Simulator habe ich die eigentliche App als geladene Anwendung im Focus.

Fazit


Zurzeit hat Qt einfach einen Vorsprung, zumindest auf der technischen Seite. Ob es diesen halten kann, wird die Zeit wohl zeigen. Wer schon gut in Qt ist, wird mit Qt Mobility keine Probleme bekommen, die Konzepte sind genauso wie sonst auch gewohnt in Qt. Gerade deswegen ist Bada einen Blick wert, da Bada hier neues bietet, zur Zeit vielleicht nicht ganz so bequem wie es unter QtCreator ist, und am Anfang die Lernkurve doch recht steil ist.
Für einen Erfahren Entwickler ist der Einstieg jedoch relativ schnell zu schaffen, da das Framework gut Dokumentiert ist, und man vieles schon leicht abgewandelt von anderen Frameworks kennt.
Als Plattform kann Bada durchaus noch eine Überraschung bieten, zumindest das Wave verkauft sich sehr gut zur Zeit, so das als weitere Plattform im Smartphonemarkt Bada sich wohl etablieren kann. Auch konnte man auf dem BadaDev Day in Frankfurt schon erkennen, das Samsung ein klares Konzept mit Bada verfolgt, so das wohl auch die Kinderkrankheiten aus der IDE verschwinden werden. Diese sind für den Anfang auch alle relativ normal.

Zurück