Einführung Android Einf hrung in Android · Sebastian Süß Grundlagen - Historie 2005 •Google...

Post on 18-Oct-2020

3 views 0 download

Transcript of Einführung Android Einf hrung in Android · Sebastian Süß Grundlagen - Historie 2005 •Google...

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üß

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 &amp; 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