einführung android einf hrung in android · sebastian süß grundlagen - historie 2005 •google...
TRANSCRIPT
Einführung in Android
Sebastian Süß
Einführung Android
FH Gießen Friedberg
12. Oktober 2010
Mittwoch, 13. Oktober 2010
Sebastian Süß
Inhalt
• Historie / Prognosen / Trends
• Grundlagen
• Entwicklungsumgebung
• Standardbeispiel
• Erweitertes Beispiel
• Übung / Quellen
2Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Historie
2005 • Google kauft Android Inc.
2007
• Open Handset Alliance mit 35 (jetzt 78) Mitgliedern gegründet. Unternehmen aus den Branchen: Software, Hardware, Netzbetreiber, Marketing
• Early Look Android SDK
2008• T-Mobile G1 (HTC Dream) Start in USA und GB
• SDK 1.0 (API Level 1) veröffentlicht
• Android wird Open Source (Apache License V. 2.0)
2009• Versionen: 1.1 (AL 2), 1.5 „Cupcake“, 1.6 „Donut“, 2.0 (AL 5) „Eclair“
• Marktanteil: 3,9%
2010• 2.1 „Eclair“, 2.2 (AL 8) „Froyo“ Mai, 3.0 „Gingerbread“ Oktober?
• Marktanteil: ca. 17,7%
3Mittwoch, 13. Oktober 2010
Sebastian Süß
Prognosen
4
Source: http://www.gartner.com/it/page.jsp?id=1434613 (2010)
OS Unit Sales WW (M) 2014 2009 Difference
Symbian 264,4 30,2 % 46,9 % -16,7 %
Android 259,3 29,6 % 3,9 % 25,7 %RIM OS 102,6 11,7 % 19,9 % -8,2 %
iOS 130,4 14,9 % 14,4 % 0,5 %Win Phone 34,5 3,9 % 8,7 % -4,8 %
Other 84,5 9,6 % 6,1 % 3,5 %Total 875,7
Mittwoch, 13. Oktober 2010
Sebastian Süß
Trends
5
http://blog.nielsen.com/nielsenwire/online_mobile/android-most-popular-operating-system-in-u-s-among-recent-smartphone-buyers
iPhone 4
Mittwoch, 13. Oktober 2010
Sebastian Süß
Trends
6
www.indeed.com
Mittwoch, 13. Oktober 2010
Sebastian Süß
Trends
7
www.fittkaumaass.de
Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen
8Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Android Platform
9
Libraries (C/C++)
SQLite
WebKit
SSL
OpenGL ES
MediaFramework
...
Android Runtime
Core Lib
Dalvik VM
Application Framework
ActivityManager
LocationManager
AudioManager
...
Applications
Home Contacts Browser ...
http://developer.android.com/guide/basics/what-is-android.html
Linux Kernel
DisplayDriver
CameraDriver
PowerManagement
...
Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Dalvik Virtual Machine
• VM speziell für mobile Geräte (knappe Ressourcen)
• Benannt nach isländischer Stadt
• Basis bildet Projekt „Apache Harmony“
• Dalvik VM ist keine Java VM!
• Verarbeitet Dalvik-Bytecode (kompakter als Java-Bytecode)
• Seit Android 2.2 mit Just-in-time-Kompilierung (JIT)
10
Dan Bornstein (Google Inc.)
Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Android package
11
.java
.java
.java
.xml
.png
.xml
javac
.class
.class
.class dx
classes.dexaapt
.xml
.png
.xml
classes.dex
.apk signieren
Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Anwendung & Prozesse
Jede Anwendung...
• wird in einem eigenen Linux-Prozess mit eigener Dalvik VM ausgeführt
• besitzt eine eindeutige Benutzer/Gruppen ID (app_<nummer>)
• besitzt einen eigenen Arbeitsbereich („Sandkasten“) im Dateisystem (/data/data/<app_package>)
• bekommt nur die Berechtigungen, die vom Entwickler nach außen bekannt gemacht werden (<uses-permission>)
http://developer.android.com/guide/topics/fundamentals.html
12Mittwoch, 13. Oktober 2010
Sebastian Süß
Grundlagen - Anwendung & Prozesse
http://developer.android.com/guide/topics/fundamentals.html
13
/data/data/
Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung
14Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android SDK
Android SDK http://developer.android.com/sdk
http://developer.android.com/guide/developing/tools
Installierte Android Plattformen: z.B. API level 7 = Android 2.1 „Eclair“
Installierte add-on APIs: z.B. Google API level 7 (Android 2.1)
15
Android Package and Device Manager
.
.
.
Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android AVD Manager
16Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android AVD Manager
17Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android AVD Manager
18Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android Emulator
19Mittwoch, 13. Oktober 2010
Sebastian Süß
Entwicklungsumgebung - Android Developer Tools (ADT) Eclipse
Installation über: https://dl-ssl.google.com/android/eclipse/20
Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Projekt erstellen
21
ID der Anwendung
Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Projektstruktur
Activity-Klasse: Erster Einstiegspunkt in die Anwendung.
Ressourcen-Klasse: Enthält Referenzen auf Ressourcen. Wird automatisch erstellt / aktualisiert.
Ressourcen-Ordner: Enthält verschiedene Ressourcen (z.B. Icons für verschiedene Auflösungen)
Manifest-Datei: Enthält Konfigurationen für eine Anwendung.
22Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Activity
23
• Behandelt eine bestimmte Benutzer-Aufgabe(z.B. Editieren oder Auswählen von Daten)
• Anwendungen besitzen i.d.R. mehrere Activities
• Eigene Activities erweitern android.app.Activity
• Setzen GUI-Layout mitsetContentView(int resource constant)
import android.app.Activity;import android.os.Bundle;
public class MyFirstAppActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}
Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Layout
res/layout/main.xml
24
ViewGroup
ViewGroup View View
View View
• ViewGroups (z.B. Linear- oder Grid-Layout)
• Views (z.B. Text, Button oder Spinner)
• Definition auch im Code möglich, aber nicht empfohlen
R.layout.main
Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Layout
<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" /> </LinearLayout>
25
System-StatusleisteActivity-TitelleisteTextView
LinearLayout
Mittwoch, 13. Oktober 2010
Sebastian Süß
Standardbeispiel - Text-Ressource
res/values/string.xml
26
<resources> <string name="hello">Hello World, MyFirstAppActivity!</string> <string name="app_name">My first Android application</string></resources>
R.string.hello, in XML: @string/hello
• Texte werden einem Schlüssel zugeordnet (z.B. „hello“)
• Zugriff mit: @string/<Schlüssel>
• Erleichtert die Lokalisierung der Anwendung
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel
27
• Anwendung: „Notensammler“
• Ansicht zum Eintragen einer Leistung
• Listenansicht der eingetragenen Leistungen
speichern
Activity: NoteErfassenActivity: NoteListe
anlegen
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Layout NoteErfassen
TextView...
RadioGroup
Spinner
EditText (number)
EditText (decimal)
Button
LinearLayout (vertical)
AutoCompleteTextView
28Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Layout NoteErfassen
29
• Neue Ressource hinzufügen mit: @+id/<id>
• Schwellwert Vorschläge:completionThreshold="<Anzahl Zeichen>"
<LinearLayout ...>
<TextView android:text="@string/info_insert_mark".../> <TextView android:text="@string/module".../>
<AutoCompleteTextView android:id="@+id/autotxt_modul" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionThreshold="3" />
<RadioGroup android:id="@+id/rgrp_term"...>
<RadioButton android:id="@+id/rbtn_st" android:text="@string/st" android:checked="true" .../> <RadioButton android:id="@+id/rbtn_wt" android:text="@string/wt".../>
</RadioGroup>
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Layout NoteErfassen
30
<Spinner android:id="@+id/spin_year" .../>
<TextView android:text="@string/crp" .../>
<EditText android:id="@+id/etxt_crp" android:inputType="number" .../>
<TextView android:text="@string/mark_percent".../>
<EditText android:id="@+id/etxt_mark_percent" android:inputType="numberDecimal" .../>
<Button android:id="@+id/btn_save" android:text="@string/save" android:onClick="onButtonClick" .../>
</LinearLayout>
• Eingabewerte bestimmen mit: inputType="<type>"
• Call-back-Methode für ButtonClick: onClick="onButtonClick"
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Ressourcen erweitern
<resources> <string-array name="modules"> <item>CS1001 Grundlagen der Informatik</item> <item>CS1003 Rechnerarchitektur</item> <item>CS1004 Algorithmen & Datenstrukturen</item> <item>CS1005 Objektorientierte Programmierung</item> ... </string-array></resources>
31
R.array.modules, in XML: @array/modules
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Ressourcen erweitern
<resources> <string name="app_name">Notensammler</string> <string name="info_insert_mark">In dieser Ansicht ...</string> <string name="module">Modul:</string> <string name="wt">Wintersemester</string> <string name="st">Sommersemester</string> <string name="year">Jahr</string> <string name="crp">Creditpoints:</string> <string name="mark_percent">Note in %:</string> <string name="save">Speichern</string></resources>
32Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Android R class
/* AUTO-GENERATED FILE. DO NOT MODIFY. * * ... */package de.suess.firstapp;
public final class R {
public static final class array { public static final int modules=0x7f040000; }
public static final class drawable { public static final int icon=0x7f020000; }
public static final class id { public static final int autotxt_modul=0x7f060000; public static final int btn_save=0x7f060006; ... }
public static final class layout { public static final int note_erfassen=0x7f030000; }
public static final class string { public static final int app_name=0x7f050000; public static final int crp=0x7f050006; public static final int info_insert_mark=0x7f050001; ... } ...}
33Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Activity NoteErfassen anpassen
public class NoteErfassen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.note_erfassen); // configure auto text view AutoCompleteTextView autotxtModul = (AutoCompleteTextView) findViewById(R.id.autotxt_modul);
String[] suggest = getResources().getStringArray(R.array.modules);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, suggest);
autotxtModul.setAdapter(adapter);
// configure year spinner Spinner spinModul = (Spinner) findViewById(R.id.spin_year);
ArrayAdapter<Integer> adapter2 = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, getYears());
spinModul.setAdapter(adapter2);...
34Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Activity NoteErfassen anpassen
public class NoteErfassen extends Activity {... public void onButtonClick(View target) {
switch (target.getId()) { case R.id.btn_save: persistNote(); // beende Activity finish(); break; } }...
• Note wird gespeichert
• Activity beendet und zurück zu „NoteListe“
35Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Activity NoteListe erstellen
36
ListViewListItem (android.R.layout.simple_list_item_1)
.
.
.
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Activity NoteListe erstellen
public class NoteListe extends ListActivity {... @Override protected void onStart() { super.onStart();
String[] noten = getNoten();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, noten);
setListAdapter(adapter);}
• ListActivity enthält Standard-Layout (ListView)
• Adapter verbindet Daten mit Darstellung
• ListItem-Layout: simple_list_item_1
37Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - Activity NoteListe erstellen
38
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.suess.firstapp" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".NoteListe" ... > ... </activity>
<activity android:name=".NoteErfassen" ... />
</application>
</manifest>
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - NoteListe Optionsmenü
39Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - NoteListe Optionsmenü
40
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item_add_mark" android:title="@string/add_mark" android:icon="@android:drawable/ic_menu_add" />
</menu>
Mittwoch, 13. Oktober 2010
Sebastian Süß
Erweitertes Beispiel - NoteListe Optionsmenü
41
public class NoteListe extends ListActivity {... @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.note_liste_menue, menu);
return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_add_mark: Intent intent = new Intent(this, NoteErfassen.class); startActivity(intent); break; }
return super.onOptionsItemSelected(item); }...
Mittwoch, 13. Oktober 2010
Sebastian Süß
Übung 1
• Arbeitsumgebung einrichten
• Notensammler implementieren
• Notensammler erweitern:
• Neuer Menüeintrag „Stats“ in NoteListe
• „Stats“ öffnet Dialog und zeigt die Anzahl eingetragener Noten und die gewichtete Durchschnittsnote
42Mittwoch, 13. Oktober 2010
Sebastian Süß
Quellen
• Google Inc. Webseite, 19.6.2010. http://developer.android.com
• Arno Becker, Markus Pant: Android, Grundlagen der Programmierung, dpunkt.verlag 2009
• Sayed Hashimi et al.: Pro Android 2, Apress 2010
43Mittwoch, 13. Oktober 2010