Um diese Webseite uneingeschränkt betrachen zu können, aktivieren Sie bitte Javascript

2020-08-04

Von: Lukas Reipert (gepr. O. Osmers)





App-Entwicklung für Android mit Xamarin


Unternehmen

Xamarin ist der Name eines US-amerikanischen Unternehmens mit Sitz in San Francisco. Die Firma wurde von Ingenieuren der Firmen Mono, Mono for Android und MonoTouch gegründet. Mithilfe von Xamarin lassen sich Applikationen für verschiedene Plattformen mit derselben Codebasis entwickeln.

Der Name Xamarin stammt von einer Primatengattung aus der Familie der Krallenaffen, dem Tamarin. Miguel de Icaza, einer der Gründer von Xamarin gab an, bei vorherigen Software-Firmen schon Affenarten als Namensgeber genommen zu haben, so zum Beispiel bei Ximian. Gegründet wurde Xamarin 2011.

 

 

 

 

Konzept

 

Mithilfe des Xamarin.Forms-Toolkit lassen sich Apps für verschiedene Plattformen mit der Programmiersprache C# entwickeln. Dabei kann der Entwickler mit Xamarin.Forms parallel an einer App für Android (Google), iOS (Apple) und die Universal Windows Platform (Microsoft) arbeiten. Die in C# geschriebenen Programmteile können dann für alle Plattformen verwendet werden. Einzig Betriebssystemspezifische Konfigurationen müssen von System zu System angepasst werden. Ein weiterer kleiner Vorteil ist die Verfügbarkeit von Xamarin als Plug-In für die Entwicklungsumgebung Visual Studio: Es kann sowohl auf einem Windows Computer als auch auf einem Mac betrieben werden und von beiden Systemen aus kann für jede der drei Plattformen programmiert werden. Wer jedoch mit der klassischen Vorgehensweise eine iOS-Applikation entwickeln möchte, der muss einen Mac besitzen und zwangsläufig von dort mit der Programmiersprache Swift seine Programme schreiben.Abseits von Xamarin.Forms gibt es auch die Möglichkeit einzelne Apps ohne den Cross-Platform-Anspruch zu entwickeln: Xamarin.Android, Xamarin.iOS und Xamarin.UWP (Universal Windows Platform). Hierbei wird der Code genauso in C# geschrieben, allerdings können dann nur die Bibliotheken einer Plattform konfiguriert werden.

 

 

Vorbereitung

 

Da mein Ziel die Entwicklung einer Applikation für Android war, bereitete ich zunächst ein Android-Smartphone für das USB-Debugging vor. Dafür setzt man das Telefon in den Entwicklermodus, in dem man unter Einstellungen -> Über das Telefon -> sieben Mal auf das Feld mit der Info über die Build-Nummer klickt. Ein Hinweisfeld weist einen darauf hin, dass man nun Entwickler ist und wenn man zurück in die Einstellungsübersicht wechselt sind dort nun die Entwickleroptionen anwählbar. Dort muss dann noch, dass USB-Debugging aktiviert werden, damit man später die App während der Entwicklung auf dem Smartphone testen kann.

 

 

Projekt anlegen

 

Zurück zu Visual Studio muss als Nächstes ein Projekt für die App angelegt werden. Dabei hat man die Wahl zwischen Xamarin.Forms, also einer Cross-Platform-App und einer „Nativen“ App für eine der verfügbaren Plattformen. Ich verfuhr mit der Auswahl Xamarin.Android (also einer nativen App weiter) und konnte noch zwischen einer leeren App und einer Formatvorlage wählen (In der dann schon eine „Activity“, also ein Aktivitätsfenster erstellt wird, für das Code in eine C#-Datei geschrieben werden kann). Hierbei kommt es auf die Vorlieben des jeweiligen Entwicklers an.

 

 

 

Xamarin Entwicklung in Visual Studio

 

Ich erkläre im Folgenden kurz die Struktur einer Entwicklungsumgebung auf der Basis von Xamarin, um danach auf die eigentliche Entwicklungsarbeit einzugehen. Die Zusammensetzung aus einer Xamarin.Android Applikation besteht grob aus zwei verschiedenen Dateitypen: .cs und .axml. Die Endung .cs stellt eine C#-Datei dar, in der wir unseren klassischen Quellcode für die Abläufe des Programms finden. Die Endung .axml kommt vom Format .xml, was „Extended markup language“ heißt und beschreibt grobgesagt die Bedienoberfläche einer Android-Umgebung, also von einem Fenster oder auch einer „Activity“. In XML-Dateien kann man strukturiert Informationen niederschreiben, die dann auch von einer Maschine eingelesen werden können. In einer .axml-Datei eines Android-Fenster werden wie beispielsweise die Textfelder entdecken, die dort enthalten sind, Eingabefelder, Buttons und die Anordnung des Ganzen. In AXML kann dann beispielsweise definiert werden wie groß die Schrift in einem Button ist, ob der Button von Haus aus sichtbar ist und wie die Elemente angeordnet sind. Hierbei arbeitet man sich von oben nach unten durch: Erst wird ein Layout für die Seite definiert, nach dem die Elemente angeordnet werden, dann kommen Elementtypen in die nächsttiefere Ebene und wiederum eine tiefer die Eigenschaften eines jeden Elements. Danach schließt man mit den Compilerbefehlen den Bereich eines Objekts. Wenn alle gewünschten Objekte enthalten sind, schließt man auch das Layout mit dem passenden Befehl ab.  Die Erweiterung des Formats, um das „a“ in AXML ist einfach der Darstellung geschuldet, da Android neben der Struktur im „Editor“ direkt eine Vorschau des Bereichs anzeigt, damit man sehen kann ob die Darstellung für bestimmte Auflösungen und Displaygrößen optimiert ist und ordnungsgemäß funktioniert. Auch ist das Erstellen eines funktionsfähigen Designs für Android nicht einmal so unkompliziert, sodass regelmäßige bzw. fortlaufende Tests unerlässlich sind. Wenn man xml allerdings kennengelernt hat, wird es wahrscheinlich auch nicht mehr lange dauern, bis man es schätzt. Denn die durchweg strukturierte Darstellung der Elemente ist schlicht von Vorteil, wenn darin viele Objekte enthalten sind.

 

 

Aber auch das „normale“ xml findet aber in Android Verwendung. Wenn es darum geht Ressourcen unterzubringen (Wie Symbole oder abgespeicherte Strings und Werte), oder die Eigenschaften der App selber festzulegen. Dazu bearbeitet man nämlich das Android-Manifest, ein sehr wichtiger Bestandteil unserer App. Im Manifest ist festgelegt, welche Android-Version der Entwickler fordert, um die App benutzen zu dürfen, welche Berechtigungen diese App vom Benutzer fordert (GPS, Kamera, Mikrofon etc.) und (ganz wichtig) wie unsere App heißt. Natürlich sind noch viele andere Bestandteile enthalten, aber alle aufzuzählen würde weder spannend sein, noch etwas bewirken. Übrigens ist diese Datei am Anfang natürlich mit allen grundlegenden Informationen ausgestattet und man wird sie höchstens erweitern. Dazu kommt, dass man auch das aus einer graphischen Oberfläche heraus machen kann und Visual Studio neue Entwickler nicht mit der .xml-Datei alleine lässt.

 

 

Struktur

 

Jetzt haben wir im Grunde alle wichtigen Bestandteile kennengelernt. Ein App-Projekt besteht aus den wichtigen Teilen: Properties (Mit dem Manifest und grundlegenden Eigenschaften), Resources (Bspw. den Ordnern „values“ für gespeicherte Werte, „layout“ für oberflächenspezifische Sachen und „drawable“ für Symbole, unser App-Icon zum Beispiel) und unseren Activites, die in form von C#-Dateien vorliegen. Hier drin müssen wir noch die im Layout-Bereich erstellten Symbole Objekten aus dem Code zuweisen, damit wir dann mit den Äquivalenten arbeiten können. Um ein kurzes Beispiel zu machen: In meiner .axml-Datei für meine Hauptseite erstelle ich einen Button und eine TextView (Also ein Feld, in dem Text angezeigt werden kann). Ich lege dort Eigenschaften für die Höhe, Weite und Textgröße fest. Dann wechsle ich in die Datei, die z.B. „MainActivity.cs“ heißen kann, lege dort ein Objekt des Typs TextView an (Nenne es praktischerweise genauso wie die TextView im Layout) und verknüpfe dort mit dem Befehl „FindViewByID“ und den Übergabewerten das Objekt TextView mit dem Äquivalent aus dem Layout. Dafür brauche ich den Ort des Layouts, was typischerweise der Ordner „Resources“ ist, da dort unsere Layout .axml-Dateien sind und die ID des Layout-Objekts, die ich auch in der .axml-Datei vergebe. So ist es möglich eine Verbindung herzustellen zwischen dem, was ich sehe (Layout) und dem was ich schreibe, damit es etwas tut (Also meinem Quellcode in C#).

 

 

Ablauf

 

Dann ist alles bereit und ich kann anfangen zu entwickeln. Der Ablauf ist da oft sehr ähnlich: Ich lege mir ein neues Bedienelement an (meistens erstmal Buttons), geben ihnen Eigenschaften und erwecke sie in meinen .cs-Dateien zum Leben, weil ich sie dort mit Programmcode belegen kann. Das heißt die App-Entwicklung passiert im Groben von zwei Seiten: Wichtig für eine App ist das Frontend, die Bedienoberfläche und das Backend, also die Programmabläufe im Hintergrund. Die .axml-Dateien verbinden beides miteinander und so steht nach kurzer Einarbeitung der Android-Entwicklung nichts mehr im Weg.