Ein Webserver für Android-Smartphones

Liegt auf der Hand: i-jetty

Marc Teufel
Die Konsolenanwendung

Während das HelloWorld-Beispiel noch relativ einfach gehalten ist, schließlich kommt hier noch keine zusätzliche Bibliothek zum Einsatz, ist das Chatbeispiel schon anspruchsvoller. Hier kommen weitere Bibliotheken ins Spiel, etwa die Jetty-Cometd-Bayeux-Implementierung, um eine Ajax-basierte Chatanwendung zu realisieren. Das interessanteste Beispiel ist allerdings die Konsolenanwendung. Sie ist zwar separat über den Android Market zu installieren, im Kern ist sie jedoch eine umfangreiche Webanwendung, die zeigt, welche Möglichkeiten in i-jetty stecken. Hier können Sie nämlich Webanwendungen schreiben und dabei aus einer Fülle an Ressourcen aus Android, also von Ihrem Smartphone, schöpfen. Wenn Sie die Konsolenapplikation über den Kontext /console starten (Login und Passwort lauten „admin“), gibt es zahlreiche Möglichkeiten, um Einstellungen und Informationen vom Smartphone zu lesen und zu schreiben: Der Zugriff auf die Telefonkontakte ist möglich, Systemeinstellungen können ausgelesen werden, die Anrufliste lässt sich einsehen und vieles mehr (Abb. 4 und 5). Wer sich den Source der Konsolenanwendung ansieht, wird feststellen, wie einfach man im Rahmen einer i-jetty-Webanwendung auf die Android-Ressourcen zurückgreifen kann. Das komplette Android API steht hier im Prinzip zur Verfügung. Bleibt nur ein Problem: Androids Dalvik VM.

Abb. 4: Die Startseite der Konsolenanwendung

Abb. 5: Mit i-jetty-Webanwendungen lassen sich auch Kontakte pflegen
Hürden bei der Entwicklung

Die Entwicklung von Webanwendungen für i-jetty unterscheidet sich kaum von den typischen Webanwendungen im WAR-Format. Wir haben nur das Problem, dass der resultierende Bytecode später auf dem Smartphone nicht auf einer typischen JVM laufen wird, sondern eben auf der schon angesprochenen Dalvik Virtual Machine. Diese VM hat ein eigenes Bytecode-Format, sodass herkömmliche .class-Dateien zunächst in das so genannte Dalvik-Executable-Format (.dex) umgewandelt werden müssen, bevor sie auf einem Android-Gerät lauffähig sind. Dazu gibt es im Android SDK [4] das Kommandozeilenwerkzeug dx, mit dem sich eine Konvertierung herkömmlicher Java-Binärdateien in das Dalvik-Format durchführen lässt. Nebenbei bemerkt: Diese Dalvik VM ist auch der Grund, warum Oracle mit Google einen Rechtsstreit führt. Oracle beschuldigt nämlich Google, mit der Dalvik VM Patente und Urheberrechte von Java zu verletzen.

Wer eine Webanwendung für i-jetty baut, kommt nicht darum herum, alle Klassen mit dem Tool dx zu behandeln. Das betrifft übrigens nicht nur die eigenen .class-Dateien einer Webanwendung, sondern insbesondere auch alle eventuell hinzugenommenen Bibliotheken. Alle jar-Dateien, die sich im WEB-INF/lib-Verzeichnis der war-Datei befinden, müssen also ausgepackt und alle Binärdateien ausnahmslos mit dx in das entsprechende Format gebracht werden. Im Wiki des i-jetty-Projekts befindet sich eine Seite [5], auf der beschrieben ist, wie man das Auspacken der Zusatzbibliotheken und das anschließende Konvertieren nach .dex mithilfe von dx und Maven bewerkstelligen kann. Auch für das Zusammenpacken der .dex-Files in das resultierende WAR liefert das Wiki ein entsprechendes Maven-Beispiel, sodass an dieser Stelle auf die entsprechenden Seiten in diesem Wiki verwiesen wird.

Ausblick

Dieser Artikel hat i-jetty vorgestellt und hat gezeigt, wie man es auf Android betreibt, was es leisten kann und welche Probleme bei der Entwicklung von Webanwendungen für i-jetty zu erwarten sind. Am Ende bleibt allerdings die Frage: Was habe ich davon, einen Servlet-Container auf einem Android-Gerät betreiben zu können? Es ist zwar eine nette Sache, einen Jetty-Server auf einem Smartphone zu installieren und Webanwendungen darauf laufen zu lassen. Offen ist aber, wer diese Webanwendungen letztendlich konsumieren soll, also welche Zielgruppe i-jetty adressiert. Interessant ist der Einsatz von i-jetty wohl am ehesten im Embedded-Bereich. Also dort, wo es darum geht, eine Webanwendung als native mobile Anwendung zu betreiben – dann natürlich angetrieben von i-jetty. Produkte wie PhoneGap machen es bereits vor. Hier entwickelt man eine mobile Webanwendung und kann sie auf verschiedene Endgeräte (Android, iPhone) mit nativem Look zu deployen. i-jetty könnte dazu dienen, diese Art von Webanwendungen lokal zu „serven“. Ein anderes Beispiel, wo man in Zukunft eventuell i-jetty einsetzen könnte, wäre das erst kürzlich gestartete neue Projekt RAP Mobile [6] aus dem Hause Eclipse. Hierbei handelt es sich um eine spezielle RAP-Version, die für mobile Geräte optimiert wurde. Wieso nicht eine Anwendung auf Basis von RAP Mobile mit einem eingebetteten i-jetty betreiben? Die Zukunft wird zeigen, in welche Richtung sich i-jetty letztlich bewegen wird. In jedem Fall handelt es sich aber um eine interessante Entwicklung, die man im Auge behalten sollte.

Marc Teufel arbeitet als Softwarearchitekt bei der hama GmbH & Co. und ist dort für die Entwicklung großer Java-Anwendungen im Logistikzentrum zuständig. Er ist Autor zahlreicher Fachartikel zu Java und .NET, hat drei Bücher zu Web Services publiziert und spricht regelmäßig auf Fachkonferenzen. Demnächst erscheint bei entwickler.press sein neues Buch „Eclipse 4“.Unter www.teufel.net ist er im Web zu erreichen.
Geschrieben von
Marc Teufel
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.