Matthias Furtmüller, Stefan Haselböck Android Grundlagen, Entwicklungsumgebung, wichtige Konzepte und Bibliotheken, Unit Testing unter Android, Simulator, Deployment
Inhaltsverzeichnis 1 Entwicklungsumgebung, Simulator... 3 1.1 Download & Installation... 3 1.2 API s installieren... 3 1.3 Java SDK... 4 1.4 Virtual Device... 4 1.5 Android-Plugin... 5 1.6 Android SDK... 6 1.7 Eclipse- Automatische Updates einstellen.... 7 1.8 Android UI Utilities... 8 2 Grundlagen, wichtige Konzepte und Bibliotheken... 8 2.1 Neues Projekt erzeugen... 8 2.2 Überblick über das Projekt... 9 2.3 Klasse R... 11 2.4 Android Manifest XML... 11 2.5 Definition von Layoutressourcen... 12 2.6 Definition von Views bzw. Widgets... 14 2.7 Exportieren von Styles... 14 2.8 Activities... 16 2.8.1 Aufruf von Activities... 18 2.9 Unit Testing unter Android... 21 2.10 Ausführen des Projekts... 22 2.11 Troubleshooting bei Ausführung... 23 2.12 Deployment einer Android App... 24 2.13 Android-Versionen... 26 2.14 Wachstum von Android von 2008 bis 2011 (Grün)... 27
1 Entwicklungsumgebung, Simulator 1.1 Download & Installation Unter folgendem Link befindet sich die Android SDK zum Downloaden: http://developer.android.com/sdk/index.html den heruntergeladenen Ordner adt-bundle-windows-x86_64-20130219 sollte man am besten aus zb. den Downloads zu den Programmen verschieben. In diesem Ordner befindet sich unter anderem eine Eclipse-Version + das SDK. 1.2 API s installieren Das heruntergeladene Zip-Archiv bitte entpacken und danach SDK Manager.exe ausführen.
1.3 Java SDK Zusätzlich zum Android SDK benötigen wir auch die aktuellste Java JDK (7u17). http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.4 Virtual Device Damit ein Virtuelles Android Device zur Verfügung steht folgende Schritte durchführen: Window -> Android Virtual Device Manager. In diesem sollte man bei Target Google APIs API Level 17 auswählen, da unsere App mit Google Maps arbeiten sollte. Vor allem Snapshot ist wichtig. Diese Funktion ist sozusagen der Ruhemodus für den Emulator was bedeutet, dass dieser nicht immer ganz neu gestartet werden muss und so sehr viel Zeit gespart werden kann. Je nach Device bzw. Android-Version, die verwendet wird, sollte man sich einen Emulator anlegen damit dies getestet werden kann. Mit der Tastenkombination STRG+F11 wird der Emulator gedreht. PS SE 4
1.5 Android-Plugin Damit alles einwandfrei in Eclipse läuft, benötigt diese Programm noch ein Plugin, welches man unter Help -> Install new Software hinzufügen kann. Wichtig ist hierbei das Eclipse als Administrator ausgeführt wird. In das Textfield Work with: bitte folgende URL eintragen: https://dl-ssl.google.com/android/eclipse/ PS SE 5
Eine genauere Anleitung + URL findet man unter: http://developer.android.com/sdk/installing/installing-adt.html Nun auf Next > klicken und die nächsten Dialoge bestätigen. Wenn die Installation durchgeführt wurde, muss Eclipse neu gestartet werden. 1.6 Android SDK Es kann sein, das durch das Verschieben des Ordners wo sich Eclipse und die Android SDK befindet, Eclipse nicht mehr den richtigen Pfad von Android SDK eingetragen hat. Um dies ändern zu können dient folgende Anleitung: Eclipse öffnen -> Window -> Preferences -> Android PS SE 6
1.7 Eclipse- Automatische Updates einstellen. Klick auf Window->Preferences PS SE 7
Danach kann man unter Help-> Check for Updates nach Updates suchen. 1.8 Android UI Utilities Unter http://j.mp/androidassetstudio finden Sie eine Website wo sie ohne Probleme Icons für ihre Android-App erstellen können. 2 Grundlagen, wichtige Konzepte und Bibliotheken 2.1 Neues Projekt erzeugen Neues Projekt anlegen unter File -> New -> Project PS SE 8
Diese Einstellungen sind natürlich nur Testeinträge. 2.2 Überblick über das Projekt Die Baumstruktur des Projekts sollte folgendermaßen aussehen: PS SE 9
Test1->src->com.example.test1->*: Hier befinden sich alle JAVA-Klassen. Test1->gen->com.example.test1->*: Automatisch generierte Dateien für den Zugriff auf Ressourcen mittels statischen Variablen. Test1->Android 4.2.2 ->*: Android-Bibliothek für die Android-Version 4.2.2. Test1->Android Dependencies->*: Hier werden Android-Bibliotheken gespeichert die zusätzlich zu der Haupt-Bibliothek noch unterstützt werden. Test1->res->drawable-*->*: alle im Projekt verwendeten Bilder Test1->res->layout->*: Hier werden die verschiedensten im Programm verwendeten layouts in xml-form gespeichert. PS SE 10
Test1->res->values->*: Hier befinden sich alle vordefinierten Texte, Farben und Styles b zw. Themes. Test1->res->menu->*: Hier wird je Layout ein Menü gespeichert. Test1->res->*: Aus diesen Werten werden Einträge in die Klasse R.java generiert. 2.3 Klasse R In der Programmierung von Android herrscht ein Konzept, welches die Teilung von Programmcode zur Programmsteuerung und Ressourcen wie zum Beispiel Layout oder Menüs klar definiert. Die Klasse welche beide Schnittstellen miteinander verbindet wir R.java genannt und generiert sich durch das Android packaging Tool automatisch. Diese Klasse ist so aufgebaut, dass innerhalb der Klasse R weitere innere Klassen vorhanden sind, welche nur statische Eigenschaften vom Typ Integer enthalten. Der große Vorteil dieses Konzepts ist die Wiederverwendbarkeit. In der Android Programmierung ist es sehr einfach beispielsweise multilinguale Programme zu entwickeln, da man nur IDs aus der R Klasse im Java Code wechseln muss. 2.4 Android Manifest XML Diese XML-Datei ist von höherer Wichtigkeit, da man in dieser Datei allgemeine Einstellungen zum Programm tätigt. Unter den Tab Manifest kann man allgemeine Informationen wie zum Beispiel Versionsnummer, User-ID, Minimum SDK Version, Target SDK Version, oder auch Max SDK Version festlegen. Unter Application werden Einstellung zum Thema Theme, Icon, Logo, Activities usw. festgelegt. Für Funktionen die am Gerät erst genehmigt werden müssen wie zum Beispiel Vibrieren und Zugriff auf das Telefonbuch gibt es den Tab Permissions hierbei kann man mittels Button Add eine neue Permission hinzufügen und diese in einem Dropdown Menü auswählen. PS SE 11
2.5 Definition von Layoutressourcen Bitte erstellen sie ein neues XML-File mittels: File->New->Android XML File PS SE 12
Diese Inhalte wie den Filenamen test.xml oder das LinearLayout sind natürlich frei wählbar. Danach bitte auf Next > klicken. Danach sieht man schon wo dieses Layout gespeichert wird. Unter /res/layout wird dieses Layout-XML File gespeichert. Das ist nicht sonderlich überraschend, da Android ja Ressourcen von Programmcode teilt. Weiters kann man zu einem PS SE 13
Layout auch eine spezifische Konfiguration treffen. Wenn man die standard Einstellungen wählen möchte, kann man auf Finish klicken. Nach dem Erstellen des Layouts findet man nun im Verzeichnis /res/layout/ das Layout wieder. Wenn man nun die Klasse R.java öffnet findet man auch dort nun einen Eintrag für dieses neu erstellte Layout. In einer Activity-Klasse kann man nun mittels setcontentview(r.layout.test); das neu erstellte Layout anzeigen. Die Erklärung der einzelnen Layouts findet man am besten unter: http://developer.android.com/guide/topics/ui/declaring-layout.html 2.6 Definition von Views bzw. Widgets In der Android-Welt verwendet man Views und Widgets in folgenden Zusammenhang: View: Alle Einzelteile die man in einem Layout platzieren kann. Dazu zählen beispielsweise Textfields, Buttons, usw. Widget: Widgets sind im Prinzip dasselbe wie Views. Die Android-Welt verwendet aber den Begriff Widget sehr oft für größere, komplexere Views wie zum Beispiel Timepicker, Progressbar, usw. 2.7 Exportieren von Styles Wenn man nun beispielsweise Textviews für Überschriften formatiert und diese Formatierung bei jeder Überschrift haben möchte, ist es sehr mühsam wenn man diese Style-Eigenschaften jedesmal durchführt. Android bietet eine Lösung die PS SE 14
den Stylesheets aus HTML sehr ähnlich kommt, indem man auf den gewünschten View einen Rechtsklickt macht und Extract Style klickt. Hier kann man dann die verschiedenen Attribute auswählen, welche man exportieren möchte und bestätigt dies schlussendlich durch einen Klick auf OK. Wenn man nun /res/values/styles.xml öffnet sieht man diesen globalen Style: PS SE 15
Je Textview kann man nun ganz einfach in der XML Ansicht mittels der R Klasse auf die Ressource Styles folgendermaßen zugreifen: 2.8 Activities Gründsätzlich lässt sich sagen, dass alle Ereignisse in Android Activities genannt werden. Activities werden in der Manifest Datei in Ihrem Projekt verwaltet. Wenn ein Activity in der Manifest Datei nicht angelegt wird, funktioniert diese im Programm auch nicht. Wenn wir in der Manifest Datei nun auf die XML Ansicht wechseln fällt auf (angenommen wir haben schon mehr als ein Activiy angelegt), dass diese aus der Reihe tanzt. PS SE 16
Mittels Intent-Filter wird festgelegt, dass diese Activity (in diesem Fall MainActivity) startbar ist und die Haupt-Activity im Programm ist. Diese Activities werden als.java Files erzeugt und erben von der Klasse Activity. PS SE 17
In dieser Abbildung zeigt sich der Lebenszyklus von einer Activity. Dies hilft vor allem wenn man beispielsweise mitloggen will und man sich so gewisser Methoden wie ondestroy() bedienen kann. 2.8.1 Aufruf von Activities Zuerst erfolgt die Änderung im Layout des Start-Layouts durch beispielsweise einen Button. Wenn man in diesem Start-Layout auf die XML-Ansicht wechselt kann man ganz leicht ein onclick-event hinzufügen. buttonclick heißt in unserem Fall die Methode die aufgerufen wird, wenn auf das Element geklickt wird. In unserer MainActivity müssen wir natürlich nun die Methode buttonclick auch erstellen. Eine Strategie, die ich hier verwende ist, dass ich bei allen Buttons auf dieselbe Methode nämlich buttonclick verweise. In dieser Methode differenziere ich dann zwischen die einzelnen Buttons. Die Methode startactivity benötigt ein Intent-Objekt also eine Art Absichtserklärung. In dieser gebe ich die Start-Klasse sowie die Ziel-Klasse an. PS SE 18
Nun müssen wir eine Ziel-Activity erzeugen mittels File->New->Class. Wichtig ist hierbei das diese Klasse von Activity erbt und wir die Methode oncreate() überschreiben. Wenn dieses Activity generiert wird wird oncreate() automatisch aufgerufen und durch den Methodenaufruf setcontentview() auch das richtige Layout angezeigt. Was sehr oft vergessen wird, aber sehr wichtig ist, ist die Eintragung in das Manifest. Hierbei bitte auf den Tab Application und Add klicken. Danach kann man rechts in ein Textfield den Namen der Activity auswählen. PS SE 19
Beim Start des Programms mittels Emulator kommt folgende Ansicht. Durch Klick auf den Button Activity wechseln folgt wie erwartet das Ziel-Layout. PS SE 20
2.9 Unit Testing unter Android Unit Testing: 1. Erstellen eines Testprojekts: Unter New/Other/Android/ Andoid Test Project auswählen, Next, Name eingeben, Next, Verknüpfung zu Android Projekt herstellen, Next, SDK auswählen und Finish. 2. Klasse erstellen: Beim Testprojekt unter src/ rechtsklick aufs Package und new Class auswählen. Klasse (Klassenname mit *Test) wie folgt mit der Superklasse android.test.activityinstrumentationtestcase2<testactivity> erstellen: PS SE 21
3. Importieren des Package vom Android Projekt z.b. import com.example.hallowelt.*; 4. Konstruktor zb wie folgt erstellen: Im super Konstrukor Aufruf die selbe Klasse wie beim Superklasse Eintrag von Schritt 2 verwenden. 5. setup() Methode erstellen, wird vor allen Testmethoden ausgeführt. 6. Testmethoden erstellen 7. teardown() Methode erstellen, wird nach den Testmethoden ausgeführt. 8. Beispiel für einen Test: @Override protected void setup() throws Exception { super.setup(); setactivityinitialtouchmode(false); mactivity = getactivity(); mbutton = (Button) mactivity.findviewbyid (com.example.hallowelt.r.id.button1); } public void testbutton1() { asserttrue(mbutton!= null); asserttrue(mbutton.getheight() > 0); } 9. Auf das Test Projekt einen Rechtsklick und Run As/Android JUnit Test auswählen. 10. Emulator startet, danach Bildschirm freigeben und der Test startet eigener JUnit Tab im Eclipse. 2.10 Ausführen des Projekts Nun wollen wir unser Projekt erstmals ausführen lassen: Dazu klicken Sie in der Menüleiste auf das grüne Symbol und wählen Sie Run as - > Android Application PS SE 22
Nach einiger Zeit (das virtuelle Device ist sehr langsam) sollte folgendes Programmfenster erscheinen: 2.11 Troubleshooting bei Ausführung Falls bei der Ausführung nun folgender Fehler kommt, kann man dies leicht korrigieren. Für die Lösung dieses Problems müssen Sie folgende Datei editieren. C:\Users\<user>\.android\avd\<avd-profile-name>.avd\config.ini In dieser Datei muss hw.ramsize=1024 auf hw.ramsize=1024mb geändert werden. PS SE 23
2.12 Deployment einer Android App Im Package Explorer rechtsklick auf das Projekt und Export wählen. Unter Android/Export Android Application und Next klicken. Danach Projektname einfach lassen und Next klicken. Beim ersten Mal neuen Keystore erstellen. Danach Create new Key auswählen und im Folgefenster die Pflichtfelder ausfüllen. PS SE 24
Im Folgefenster noch den Pfad wo die.apk Datei gespeichert werden sollte auswählen und danach auf Finish klicken. Die Datei mit einem USB Kabel oder mittels anderen Mitteln aufs Handy kopieren. Einstellungen am Handy: Unter Einstellungen/Anwendungen muss man das Installieren von nicht-market- Anwendungen erlauben. Den Pfad wo man die.apk Datei am Handy gespeichert hat folgen und einmal auf die Datei klicken. Danach auf OK klicken und die App installiert sich. Jetzt wie gewohnt einfach die App starten. PS SE 25
2.13 Android-Versionen Abbildung 1: Quelle: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html PS SE 26
2.14 Wachstum von Android von 2008 bis 2011 (Grün) PS SE 27