Stand: 21.06.2018

1.1 Mobile Apps

In dieser Vorlesung erlernen wir die Entwicklung mobiler Apps. Unter einer App verstehen wir ein Computerprogramm, das auf einem mobilen Endgerät, typischerweise einem Smartphone oder einem Tablet, läuft bzw. für ein mobiles Betriebssystem wie iOS oder Android OS entwickelt wurde.

Mobile Endgeräte umfassen auch Smartwatches, Smart Glasses, Computer im Auto, im Haus und in Alltagsgeräten (Stichwort Internet of Things). Für Android gibt bereits entsprechende Technologien wie Wear OS (früher Android Wear) und Android Things. Hier beschränken wir uns auf Smartphones und Tablets.

Der Durchbruch der Smartphones zog einige dramatische technische und konzeptionelle Änderungen mit sich in Hinblick auf die Konzepte "Programm" und "User Interface".

1.1.1 Traditionelle Programme vs. Apps

Auf Desktop-Computern und Notebooks sind "Programme" relativ komplexe Anwendung, z.B. Textverarbeitung, Foto-Bearbeitung, E-Mail-Verwaltung, Internet-Browser etc. Computer, die hauptsächlich eigene Software auf der Festplatte haben und nutzen, nennt man auch Fat Clients oder Rich Clients.

Auf Rich Clients laufen i.d.R. traditionelle Programme mit folgenden Eigenschaften:

Auf mobilen Endgeräten (Smartphones, Tablets) sprichts man eher von einer App statt von einem Programm. Apps haben oft eine spezifische Aufgabe (Taschenrechner, Wecker, Notizblock, Adressbuch, Kamera), können aber auch sehr komplex werden (Mail, Browser, Computerspiele). Apps haben folgende Eigenschaften:

Ein weiterer wichtiger Unterschied aus Sicht der Anwender sind natürlich die Kosten einer App. Während ein Desktop-Programm eher im Bereich 50-300 EUR liegt, sind viele Apps kostenlos oder werden für 1-30 EUR vertrieben. Bei Apps wird zudem häufig mit "In-App-Käufen" gearbeitet, d.h. man kann nach Erwerb der App gegen Zusatzgebühren bestimmte Funktionen freischalten (oder Werbeeinblendungen ausschalten).

Natürlich verschwimmen diese Kategorien immer mehr und Entwicklungen in der einen Kategorie haben die jeweils andere Kategorie beeinflusst. Auf Notebooks spricht man mittlerweile auch von Apps (inkl. entsprechenden App-Stores). Tablets werden mehr und mehr zu leistungsfähigen Notebooks mit dem identischen Betriebssystem (Windows).

Diese Fusion der Philosophien wird u.a. durch die Kategorie der Web-Applikationen getrieben, d.h. Anwendungen, die innerhalb eines Browsers laufen. Diese Anwendungen zielen sowohl auf den Desktop als auch auf das Smartphone ab und finden immer wieder innovative Lösungen, um diese beiden Welten zu vereinen.

1.1.2 Native Apps

Wir beschäftigen uns mit der Entwicklung nativer Apps für Android. Das bedeutet, dass wir eine Programmiersprache und Bibliotheken wählen, die ganz nah an der Android-Plattform dran sind bzw. identisch sind mit den Technologien, die auch die Entwickler des Betriebssystems nutzen. Auf Android heißt das die Programmiersprache Java. Auf Apple-Geräten z.B. wäre das die Sprache Swing (früher Objective-C).

Der große Nachteil nativer App-Entwicklung ist natürlich, dass man die App nur auf der einen Plattform nutzen kann und für andere Plattformen (z.B. Apple-Smartphones) die App neu entwickeln muss.

Es gibt mehrere Lösungsvorschläge für dieses Problem.

Die einfachste ist es, einen Service als Web-Applikation anzubieten, d.h. über interaktive Webseiten, die mit jedem Browser verwendet werden können. Das hat diverse Nachteile: man muss immer erst einen Browser starten, man kann die App nicht über einen App-Store vertreiben, Animationen laufen nicht ganz so flüssig, das Look'n Feel entspricht nicht dem der nativen Apps und es ist fast immer eine Internetverbindung notwendig.

Hybride Apps greifen diese Idee auf und verwenden Webtechnologien wie JavaScript und HTML/CSS, um plattformunabhängige Anwendungen zu programmieren. Die finale Anwendung besteht im Grunde aus einem eingebetteten Browser (als Runtime-Umgebung) und dem Code. Ein bekanntes Framework ist Cordova bzw. PhoneGap. Nachteil hybrider Apps ist, dass die Benutzeroberfläche oft nicht dem Standard-Look-and-Feel der jeweiligen Plattform entspricht. Außerdem kann es auch hier bei Animationen zu Performanceproblemen kommen.

Cross-Plattform-Apps werden ebenfalls mit einem Framework entwickelt und dann für die jeweiligen Plattformen compiliert. Dabei werden die UI-Systeme der jeweiligen Plattformen verwendet. Bekannte Frameworks sind Xamarin und Appcelerator.

1.2 Android

Android basiert auf dem beliebten Linux-Betriebssystem und hat mehrere Schichten. Jede Schicht greift lediglich auf die direkt darunter liegende zu. Man sagt auch, eine Schicht "kapselt" die darunter liegende Funktionalität.

Android-Architektur

Wenn Sie Ihre App also in Java programmieren, haben Sie weder mit Linux noch mit C++ direkt zu tun.

1.2.1 Version, Codename, API-Level

Android hat eine lange Versionsgeschichte und leider gibt es viele Geräte mit älteren als der aktuellen Version.

Die Versionen werden mit einer Zahl für die Hauptversion und einer Zahl für die Unterversion benannt, zum Beispiel die Version 8.1. Jede Hauptversion ist nach einer Süßigkeit als Codenamen benannt, z.B. "Oreo" für Version 8.1.

Zusätzlich gibt es mit dem API-Level eine durchgehende Nummerierung über alle Unterversionen hinweg. Die Version 8.1 hat zum Beispiel das API-Level 27 (man sagt auch einfach "API 27"). Beim Entwickeln wird i.d.R. das API-Level genutzt, weil man mit einer einzigen Zahl sehr unaufwändig testen kann welche von zwei Versionen höher ist. "API" steht für application programming interface (Schnittstelle für die Programmierung von Anwendungen).

Hier sehen Sie eine gekürzte Historie der Versionen, Codenamen und API-Level. Eine vollständige Übersicht der Versionen finden Sie auf Wikipedia.

Version Codename API Release
8.1 Oreo 27 12/2017
8 Oreo 26 08/2017
7 Nougat 24 08/2016
6 Marshmallow 23 10/2015
5 Lollipop 21 11/2014
4.4 KitKat 19 10/2013

Auf dem Distribution dashboard können Sie nachschauen, wie weit welche Version verbreitet ist (Stand 05/2018):

Verbreitung Android-Versionen

Wenn Sie ein neues Projekt in Android Studio anlegen, werden Sie gefragt, welche Minimalversion Ihre App einfordern soll. Sie sehen gleichzeitig die Angabe, wie viele Geräte Sie damit weltweit abdecken. Bei KitKat (API 19) sehen Sie z.B. derzeit:

Minimale Android-Version

1.2.2 Voraussetzungen

Zum Programmieren von Android Apps benötigt man:

1.2.3 Vom Code zur App

In Android Studio schreiben Sie Java Quellcode. Dieser Quellcode wird bekanntlich zu Bytecode übersetzt (Dateien mit Endung .class). Android benötigt allerdings speziellen Bytecode, den sogenannten Dalvik Bytecode und übersetzt den Bytecode daher in .dex Dateien. Diese Dateien werden zusammen mit den Ressourcen (Bilder etc.) zusammengepackt (ZIP) in eine .apk Datei, ein Android Package.

In einem Artikel von David Griffiths (Autor von Head First Android Development) finden Sie tiefer gehende Infos.

1.3 Werkzeuge

Android Studio ist seit 2013/14 die "offizielle" Entwicklungsumgebung für Android-Endgeräte. Sie wird von Google kostenlos für alle großen Betriebssysteme (Windows, Mac, Linux) zur Verfügung gestellt.

Seit Oktober 2017 liegt die Version 3 vor und basiert auf der Java-Entwicklungsumgebung IntelliJ IDEA der tschechischen Firma JetBrains.

Android Studio

1.3.1 Android Studio

In Android Studio tun Sie im wesentlichen folgende Dinge:

Android Studio verwendet intern mehrere Software-Werkzeuge, um die vielen Aufgaben zu erfüllen.

Bei jeder Programmiersprache muss der Quellcode (das, was Sie schreiben) in "Maschinencode" (bei Java nennt man das Bytecode)übersetzt werden. Diese Aufgabe übernimmt ein sogenannter Compiler.

Der übersetzte Code wird dann zusammengeführt mit Standard-Bibliotheken (das sind Klassen und Methoden, die Android bereit stellt). Das alles wird, zusammen mit weiteren Dateien wie z.B. Bildern, in eine große ZIP-Datei gepackt.

Um die verschiedenen Aufgaben wie das Compilieren, Kopieren, Zippen und Löschen von Dateien zu koordinieren, wird ein Build-Management-Tool eingesetzt. In einem solchen Tool werden die verschiedenen Abläufe und mögliche Abhängigkeiten in Textdateien (häufig auch XML) spezifiziert, die man sowohl gut lesen und leicht ändern kann. Android Studio verwendet dazu Gradle (andere bekannte Tools sind make, insbes. in der C-Welt, oder Ant in der Java-Welt).

1.3.2 Endgerät und Emulator

Zusätzlich ist es nicht verkehrt, eine Android-Phone oder -Tablet zum Testen zu besitzen. Dies ist aber nicht zwingend nötig, da es sog. Emulatoren gibt, die ein Android-Phone auf dem Rechner simulieren. Ein Emulator ist eine Simulationssoftware für ein spezifisches Endgerät, z.B. das Smartphone "Google Pixel 2".

Android Emulator

Wenn Sie ein Projekt starten, wird Ihnen immer auch die Option Create New Virtual Device angeboten. Da können Sie nach Belieben neue Emulatoren installieren.

1.4 Übung

Installieren Sie Android Studio.

Erzeugen Sie ein neues Projekt und starten Sie es, ohne etwas am Projekt zu ändern.

Installieren Sie mindestens jeweils einen Emulator für ein aktuelles Smartphone, z.B. das Google Pixel 2, und ein aktuelles Tablet.