Bada SDK - Ein Blick auf Samsungs neues mobiles OS

2010-05-08 19:45


Samsung hat am vorherigen Donnerstag das Bada SDK für die Öffentlichkeit freigegeben. Damit kann nun auch jeder außerhalb des Bada Partnerprogramms ein Blick auf Bada werfen, und reale Erfahrungen mit dem SDK und der Entwicklung für Bada sammeln. Einen ersten Beitrag zu Bada hatte ich ja schon im Dezember geschrieben.

In diesem Blogbeitrag möchte ich über meine eigenen Erfahrungen mit dem Bada SDK schreiben, wie ich es auch letzte Woche schon für das Qt Mobile SDK von Nokia getan habe. Im Vergleich zu Qt Mobile fällt als erstes mal auf, das Bada nicht ganz so offen ist, wie es Qt ist. Man kann das SDK erst nach einer Registrierung bei Samsung herunterladen, und auch dann ist häufig für weitere Informationen erst ein Login nötig, z.b. für das offizielle Badaforum. Auch ist Bada etwas vollkommen neues, so das man weniger Resourcen dazu im Netz findet, als bei Qt. Und da ich schon einiges an Qt Erfahrung habe, wäre ein Vergleich zur Zeit auch eher voreingenommen. Aber erstmal zum SDK.

Installation und erste Schritte


Samsung hat ähnlich wie Nokia eine eigene IDE entwickelt, jedoch nicht wie Nokia mit Qt Creator von Grundauf neu, sondern entschied sich Samsung hier für eine Eclipse Variante mit CDT. Nach der Installation des SDK kann man also die BadaIDE das erste Mal starten. Ich muss wohl sagen, das ich bisher keine große Eclipse CDT Erfahrung habe, und auch bisher eher auf andere IDE setzte, die Eclipse Umgebung ist also erstmal etwas ungewohnt. So fand ich keine Möglichkeit, den Compilerpfad einzustellen, offenbar vertraut hier Samsung darauf, das man den Pfad zum SDK Compiler (ein GCC/MinGW) unter Windows im PATH hat. Dann klappts, allerdings benötigt der Simulator Admin Rechte, so das auch die IDE als Admin ausgeführt werden sollte.
Empfehlenswert ist es, sich die Bada SDK Samples anzusehen, dort gibt es viele Beispiele, welche auch auf anhieb compilieren und dann im Simulator ausgeführt werden können. Für eigene Kreationen ist dann die Lernkurve sehr steil. Bada ist eine komplette Neuentwicklung, und somit muss man sich erstmal viel in verschiedene Dinge einlesen. Auch geht in einigen Dingen Bada seinen eigenen Weg, so das man erstmal herausfinden muss wie man ans Ziel kommt. In der IDE gibt es einen Form Designer, welcher allerdings so direkt für die einzelnen Steuerelemente keine Events oder Variablen anlegen kann. Dies muss man entweder von Hand tun, oder über das Kontextmenü Add Class aufrufen, wo dann entsprechend eine Formklasse generiert wird. Allerdings enthält diese auch keine Membervariablen, all dieses muss selber angelegt werden. Auch ein Button Event muss von Hand programmiert werden. Bada ist hier also aktuell noch etwas aufwändiger, als andere Rad Tools. Die Properties der Controls im Form Designer lassen sich aber direkt eingeben. Mein erster Eindruck des Formdesigners ist allerdings, das Samsung hier noch nachbessern kann, viele andere aktuelle Tools für andere Frameworks sind hier schon wesentlich weiter.

Eine HelloBada App


Bada verfügt über eine Online Dokumentation, und mit der IDE hat man auch schnell im Workspace sein erstes eigenes Projekt erstellt. Ähnlich wie ich es schon für Qt Mobility getan habe, wollte ich diesmal wieder ein einfaches Programm schreiben, welches einen ersten Eindruck des SDK und Simulators vermittelt. Ich verwendete also wieder mein Layout, und erstellte dieses im Form Designer recht zügig: Ein TextEdit, ein Button und eine Liste. Und wieder soll bei einem Klick auf den Button der Text aus dem TextEdit in die Liste wandern. Mein erstes Problem in Bada war nun, herauszufinden, wie so ein Button Event hier funktioniert. Default mäßig gibt es beim Erstellen einer Bada Form Application schon auf der Form einen Button, und so konnte ich mir hier die Funktionalität abschauen. Als erstes benötigt man eine Membervariable vom Typ Button*, welche man dann mit GetControl("IDC_BUTTON_ADD") auf die korrekte Button Instanz zeigen lässt. Ist dies geglückt, muss man der Instanz nur noch ihre eigene ID mitteilen und sich mit button->AddActionEventListener(*this); bei ihr als EventListener registrieren.
Wird der Button nun angeklickt, benachrichtigt der Button die Methode

HelloBada::OnActionPerformed(const Osp::Ui::Control[&] source, int actionId)


Dort muss man dann mittels eines switch Konstrukts auf actionId herausfinden, welcher Button den nun den Event sendet. Dort kann man dann entsprechend den Text mit GetText und AddItem an die Liste weiterreichen. Dann kann man die App im Simulator ausprobieren:

tl_files/codenode/badasdk/bada_wave_sim_h.png


Leider gibt es in Bada zur Zeit keine Sizer/Layouts, so dass man jeweils für den Portrait und Landscape Modus mit den Widgets ein eigenes Layout dafür erstellen muss. Im Form Designer kann man deshalb auch die Ansicht umschalten, allerdings sind die Widgets welche man im Portraitmodus schon erstellt hat, ebenfalls schon in der Landscape Ansicht vorhanden, so das man diese nur noch an die richtige Position bringen muss. In Qt erledigte dies das Layout direkt.

Der Simulator


Wie das obige Bild schon zeigt, bringt auch das Bada IDE seinen eigenen Simulator mit, welcher einen Skin des Wave zur Zeit hat. Das Wave wird ja das erste Bada Modell sein was auf den Markt kommt, und zur Zeit sind noch keine weiteren Modelle bekannt. Jedoch ist dies im SDK schon Modular so aufgebaut, das spätere Modelle sich nahtlos in SDK und Simulator integrieren werden. Der Simulator braucht zum Starten relativ lange, und auch dann ist erstmal nur ein Startscreen zu sehen, ebenfalls verfügt der Simulator über ein Fenster zum steuern von Events:

tl_files/codenode/badasdk/bada_wave_sim_v_start.png

tl_files/codenode/badasdk/bada_event_injector.png

Beim Simulatorstarts gibt es 3 Startscreens:
  • ein Erster mit dem Schriftzug "Samsung"
  • danach sieht man den Home Screen
  • beim laden der Anwendung sieht man
    obigen Startsreen.
Ebenfalls gibt es ein Fenster um
Events und Nachrichten an das
Telefon zu senden, auch lassen sich
hier die Sensoren emulieren.



Der Event Injector teilt sich in folgende Unterfenster auf:

  • Call - Hier kann man den Simulator mit einer anzugebenden Nummer anrufen
  • Network - Verbindung zum Mobilfunknetz konfigurieren
  • Messaging
    • SMS - SMS an Simulator schicken
    • Status Report - Dem Simulator mitteilen ob das Senden einer MMS oder SMS geklappt hat.
    • Wap Push
    • Push Notification
  • Location
    • Location Data - Einstellungen zu den Koordinaten
    • Zone Event
    • Location Request
  • Sensors
    • Weather - ???
    • Accelerometer - X,Y,Z Werte einstellbar, aber auch Defaultwerte/Bewegungen anklickbar
    • GPS Sensor - Einstellen, welchen Wert der GPS Sensor hat
    • Magnetic - Das Magnetometer in X,Y,Z Werten
    • Tilt - Azimuth deutet hier auf Kompass funktionen hin (Pitch und Roll Axis auch einstellbar)
    • Proximity - On/Off und wie bei Weather kann hier eine Datei ausgewählt werden
  • Device - Geräte Einstellungen (Batterie, USB/MMC Events, Kopfhörer, RSSI)

Fazit


Samsung hat noch einiges vor mit Bada. Auch diesem SDK merkt man den Beta Status noch an, hinzu kommt die steile Lernkurve die Bada als komplett neue API und neues OS/SDK/IDE hat. Eclipse und Eclipse CDT Kenntnisse sind sicherlich hilfreich. Bada ist allerdings gut Dokumentiert, und viele Beispiele erleichtern einem den Einstieg, so das mit etwas Zeit und Geduld man auch für Bada die passenden Apps erstellen kann. Als erfahrener C++ Entwickler hat man wohl keine Probleme.
Allerdings ist die 2 Way Construction in Bada etwas ungewohnt, nach new sollte man noch Construct für jedes Objekt aufrufen. Etwas unschön finde ich, das in den Beispielen die Membervariablen mit __ beginnen, dies ist eigentlich ein Privileg des Compilers. Auch ist Bada in sehr altem C++ Dialekt entwickelt, ich hätte mir einen etwas moderneren Ansatz hier gewünscht, Templates fehlen fast völlig. Samsung setzt hier sehr viel auf Interfaces, so das man häufig von verschiedenen IListener Klassen ableitet und diese Implementieren muss, hier würde ich mir etwas mehr Unterstützung durch die IDE wünschen, auch im Form Designer wäre dies wünschenswert.
Insgesamt also ein vielversprechender Ansatz für mobile Entwicklung in C++, wenn auch zur Zeit mit etwas mehr "Handarbeit" als unter anderen IDEs gewohnt.
Als ersten Einstieg empfehle ich auch die Tutorials auf badadev.com, das dortige Forum ist auch für Fragen gut geeignet.


Zurück