Android 24.09.2013
Android Plattform/Betriebssystem für mobile Endgeräte wie z.b. Smartphones Basiert auf dem Linux Kernel Bis auf grundlegende Prozesse werden alle Anwenden mithilfe einer speziellen JVM (Dalvik Virtual Machine DVM) ausgeführt -> Plattformunabhängigkeit der Anwendungen Im Vergleich zu Java ME sind fast alle Packages von Java SE enthalten Zusätzlich viele Android eigene APIs Derzeit aktuellste Version Android 4.3 Jelly Bean 2 24.09.2013 Mobile Systeme - Android
Smartphone-Features (Moore lässt grüßen) G1 (HTC Dream) (Herbst 2008) 528 Mhz, 192 MB RAM 3,2 Display (480x320 Pixel) BT, WLAN GPS, digitaler Kompass Beschleunigungssensor Samsung Galaxy S4 4 x 1,9 GHz, 2 GB RAM 5 Display (1920x1080 Pixel) BT, WLAN, NFC GPS, digitaler Kompass Beschleunigungs-, Nährungs- u. Umgebungslichtsensor, Gyroskop, IR, 3 24.09.2013 Mobile Systeme - Android
Mobile Devices Verkaufsstatistiken 2Q2013 Weltweite Verkäufe von Mobile Devices in 2Q13: 435 Millionen Davon Verkäufe von Smartphones in 2Q13: 225 Millionen (51,7%) 2,7% 3,3% 14,2% 79,0% Android ios Research in Motion Microsoft Bada Symbian Others Quelle: http://www.gartner.com/ Quelle: Gartner, http://www.gartner.com/newsroom/id/2573415 6 24.09.2013 Mobile Systeme - Android
% Smartphone-Marktanteile im Vergleich zum den Vorjahren (Neuverkäufe) 80,0% 70,0% 60,0% 50,0% 40,0% 30,0% 20,0% 10,0% 0,0% Marktanteil 4Q10 Marktanteil 4Q11 Marktanteil 4Q12 Marktanteil 2Q13 Quelle: http://www.gartner.com/ Quelle: Gartner 7 24.09.2013 Mobile Systeme - Android
Android History Juli 2005: Kauf der Firma Android Inc durch Google November 2007: Gründung der Open Handset Alliance Veröffentlichung des Android SDK für Entwickler Oktober 2008 Februar 2009 - Version 1.1 April 2009 September 2009 Oktober 2009 Januar 2010 Mai 2010 Dezember 2010 Februar 2011 Oktober 2011 - Veröffentlichung der ersten Version als open-source - Version 1.5 Cupcake - Version 1.6 Donut - Version 2.0 Eclair - Version 2.1 Eclair - Version 2.2 Froyo - Version 2.3 Gingerbread - Version 3.0 Honeycomp (Tablets) - Version 4.0 Ice Cream Sandwich (Tablets und Smartphones) 9 24.09.2013 Mobile Systeme - Android
Android History Juni 2012 - Version 4.1 Jelly Bean Februar 2013 - Version 4.2.2 Jelly Bean Juli 2013 - Version 4.3 Jelly Bean" 10 24.09.2013 Mobile Systeme - Android
Android OpenSource? Kernel: GPLv2 System: Apache Software License, 2.0 Google Apps: nicht im Sourcecode verfügbar (Maps, Gmail, Talk, ) Hersteller spezifische Treiber können closed-source sein (z.b für Kamera) Mods (z.b. CyanogenMod ): Aus verfügbaren Sourcecode erstellte Android-Derivate Aktuelle Android-Versionen für Geräte, die vom Hersteller keine Updates mehr erhalten Erweiterungen um zusätzliche Funktionalitäten Bootloader muss Austausch des Kernels und Systems ermöglichen 11 24.09.2013 Mobile Systeme - Android
Android Apps: Laufzeitumgebung / Entwicklung Dalvik Virtual Machine (DVM) zur Verarbeitung von Registermaschinencode zur effizienten Programmausführung auf Register-basierten Prozessoren. Spezifisches Dex-Bytecodeformat (Dateierweiterung.dex) SW-Entwicklung mithilfe des Java SE SDKs möglich Mithilfe des Native Development Kits (NDK) können auch native Funktionen in C oder C++ für Android-Geräte entwickelt und über das Java Native Interface (JNI) in Java-Apps eingebunden werden. Quelle: http://developer.android.com/ 12 24.09.2013 Mobile Systeme - Android
Dalvik VM (DVM) Spezielle VM die Register-basiert arbeitet. Dadurch lässt sich der Bytecode effizienter auf Register basierten Prozessoren ausführen. Eignes Format für den Bytecode: Dex-Format Entwicklung mithilfe des Java SE SDKs Java-Bytecode wird übersetzt in Dex (Dateierweiterung.dex) 13 24.09.2013 Mobile Systeme - Android
Android - Systemarchitektur Quelle: http://developer.android.com/guide/basics/what-is-android.html 14 24.09.2013 Mobile Systeme - Android
Die erste Anwendung File -> New -> Project Android Application Project 15 24.09.2013 Mobile Systeme - Android
API-Level Platform Version API Level Name Android 1.0 1 Android 1.1 2 Android 1.5 3 Cupcake Android 1.6 4 Donut Android 2.0 5 Eclair Android 2.0.2 6 Eclair Android 2.1.x 7 Eclair Android 2.2.x 8 Froyo Android 2.3, 2.3.1, 2.3.2 9 Gingerbread Android 2.3.3, 2.3.4 10 Gingerbread Android 3.0.x 11 Honeycomb Android 3.1.x 12 Honeycomb Android 3.2 13 Honeycomb Android 4.0, 4.0.1, 4.0.2 14 Ice Cream Sandwich Android 4.0.3 15 Ice Cream Sandwich Android 4.1, 4.1.1 16 Jelly Bean Android 4.2, 4.2.2 17 Jelly Bean Android 4.3 18 Jelly Bean 16 24.09.2013 Mobile Systeme - Android Siehe auch: http://developer.android.com/guide/appendix/api-levels.html
Verteilung der Versionen gezählt werden alle Android- Geräte, die innerhalb von 7 Tagen auf den Play-Store zugegriffen haben. (Stand: 4 September 2013) Quelle: http://developer.android.com/about/dashboards/index.html 17 24.09.2013 Mobile Systeme - Android
Die erste Anwendung 18 24.09.2013 Mobile Systeme - Android
Die erste Anwendung 19 24.09.2013 Mobile Systeme - Android
Struktur des generierten Projekts 20 24.09.2013 Mobile Systeme - Android
Erstellen einer neuen Emulator-Konfiguration Windows -> AVD (Android Virtual Device) Manager 21 24.09.2013 Mobile Systeme - Android
Erstellen einer neuen Emulator-Konfiguration 22 24.09.2013 Mobile Systeme - Android
Ausführen der Anwendung Über den Run -Button in Eclipse ggf. erscheint die Meldung Run As Hier Android Application auswählen Das AVD startet automatisch Wurde der Emulator gestartet so wird die Anwendung installiert und gestartet Der Emulator braucht für einen erneuten Start nicht geschlossen werden! 23 24.09.2013 Mobile Systeme - Android
Ausführen der Anwendung 24 24.09.2013 Mobile Systeme - Android
ADT logcat Nachfrage 25 24.09.2013 Mobile Systeme - Android
Starten auf einem Telefon 1. Telefon einrichten USB-Debugging unter Einstellungen -> Anwendungen -> Entwicklung aktivieren 2. Telefon anschließen (ggf. passende Treiber installieren) 3. Anwendung startet beim nächsten Start automatisch auf dem Telefon 26 24.09.2013 Mobile Systeme - Android
Activities
Activity Einer der Hauptbestandteile einer Anwendung Stellt eine Benutzeroberfläche dar, mit der der Anwender interagiert Eine Anwendung besteht aus beliebig vielen Activities Eine Activity wird als main gekennzeichnet, diese wird bei Programmstart als erstes angezeigt Alle Activitys laufen eigenständig und sind nur lose miteinander gekoppelt Somit direkter Datenaustausch nicht möglich Eine Activity kann eine andere aufrufen und auch Daten mitgeben 28 24.09.2013 Mobile Systeme - Android
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.init.helloworld" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".helloworldactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> 29 24.09.2013 Mobile Systeme - Android
Benutzerinterface einer Activity Zusammengesetzt aus Views Widgets - Sichtbare Elemente mit denen der Benutzer interagiert Layouts Ordnen Widgets nach einem Layout an Werden in einer beliebigen Baumstruktur angeordnet Die Baumstruktur kann im Quellcode erzeugt werden Üblich ist aber sie in einer XML-Datei zu beschreiben Im Beispiel res/layout/main.xml 30 24.09.2013 Mobile Systeme - Android
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/textview1" /> </LinearLayout> 31 24.09.2013 Mobile Systeme - Android
LinearLayout android:orientation="vertical" android:layout_width="wrap_content android:layout_height="wrap_content" android:layout_width="match_parent android:layout_height="wrap_content" android:layout_width="match_parent android:layout_height="match_parent" 32 24.09.2013 Mobile Systeme - Android
LinearLayout android:orientation="horizontal" android:layout_width="wrap_content android:layout_height="wrap_content" android:layout_width="wrap_content android:layout_height="match_parent" android:layout_width="match_parent android:layout_height="wrap_content" 33 24.09.2013 Mobile Systeme - Android
AbsoluteLayout 81 56 192 164 40 330 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/absolutelayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="194dp" android:layout_height="wrap_content" android:layout_x="81dp" android:layout_y="40dp" android:text="@string/button1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="56dp" android:layout_y="164dp" android:text="button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="106dp" android:layout_x="192dp" android:layout_y="330dp" android:text="button" /> </AbsoluteLayout> 34 24.09.2013 Mobile Systeme - Android
Aufgabe 1. Erstellen Sie eine GUI mit verschiedenen Widgets und experimentieren Sie mit dem Layouteditor 35 24.09.2013 Mobile Systeme - Android
HelloWorldActivity.java package de.init.android.helloworld; import android.app.activity; import android.os.bundle; public class HelloWorldActivity extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } 36 24.09.2013 Mobile Systeme - Android
Logging Das Android-Framework enthält eine Klasse um Log-Ausgaben zu erstellen. Dieses Log kann in der Entwicklungsumgebung angezeigt werden logcat. public static int Log.v(String tag, String msg); public static int Log.d(String tag, String msg); public static int Log.i(String tag, String msg); public static int Log.w(String tag, String msg); public static int Log.e(String tag, String msg); 37 24.09.2013 Mobile Systeme - Android
Logging - Beispiel public class MainActivity extends Activity { } private static final String TAG = "Mein TAG"; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Log.v(TAG, "Log Test"); } 38 24.09.2013 Mobile Systeme - Android
Die Klasse R Wird automatisch generiert R.layout enthält IDs für die Layouts R.id enthält alle IDs die für andere Views definiert wurden R.drawable enthält alle Bilder aus dem Ordner drawable R.string enthält alle Textresourcen Achtung es werden nur IDs gespeichert über die Referenzen zu den Objekten bezogen werden können! 39 24.09.2013 Mobile Systeme - Android
Zugriff auf Views über eine ID Am Beispiel des TextView aus der HelloWorld Activity TextView in der main.xml um ein android.id -Attribut erweitern: <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/textview1" /> + gibt an, dass eine neue ID erzeugt werden soll Beim Speichern wird R automatisch aktualisiert Zugriff im Quellcode: TextView textview1 = (TextView) findviewbyid(r.id.textview1); 40 24.09.2013 Mobile Systeme - Android
Zustände einer Activity Eine Activity kann verschiedene Zustände annehmen Für jeden Zustand kann eine zugehörige Methode überschrieben werden, die bei einem Zustandswechsel aufgerufen werden Quelle: http://developer.android.com/guide/topics/fundamentals/activities.html 41 24.09.2013 Mobile Systeme - Android
Zustände einer Activity Methode Beschreibung Nächster Zustand oncreate() Wird ausgeführt, wenn die Activity erstellt wird. onstart() Hier sollten alle Initialisierungen ausgeführt werden. onrestart() Wird ausgeführt nachdem die Activity gestoppt onstart() wurde und wieder ausgeführt wird. Hiernach folgt immer onstart() onstart() Wird ausgeführt bevor die Activity für den Benutzer sichtbar wird. Es folgt onresume(), wenn die Activity sichtbar wird, oder onstop() onresume() oder onstop() wenn die Activity versteckt ist. onresume() Wird als letzes Aufgerufen, bevor die Activity onpause() onstop() onpause() aktiv wird. Wird aufgerufen, wenn das System den Start oder das Fortsetzen einer anderen Activity vorbereitet. Wird aufgerufen, wenn die Activity nicht mehr für den Benutzer sichtbar ist. onresume() oder onstop() onrestart() oder ondestroy() ondestroy() Wird aufgerufen, bevor die Activity zerstört wird. - Quelle: http://developer.android.com/guide/topics/fundamentals/activities.html 42 24.09.2013 Mobile Systeme - Android
Aufgaben 2. Ändern Sie den Text des TextView hello_world aus der oncreate- Methode heraus. 3. Erstellen Sie eine Activity die alle Methoden der Zustandsänderung überschreibt. Geben Sie für jede Zustandsänderung eine Meldung im Log aus. 43 24.09.2013 Mobile Systeme - Android