Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Android Development

No description
by

P. Wenzel

on 9 April 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Android Development

ANDROID
Was ist Android?
von Paul Wenzel
Entwickler
Tools

SDK-Manager
Eclipse +
ADT-plugin
intigriert Android Workflows in Eclipse
intigriert die Android API
verschiedene Graphical XML Editors
intigriert SDK Tools
AVD-Manager
Graphische UI, um Android Virtual Devices zu erstellen und zu managen
(benötigt den Android Emulator)
Android Devices
ADT Bundle
src-Ordner
alle Java -Quelltexte des Android-Projektes
res-Ordner
Layouts
Strings
Werte
Bilder
Mediadateien
sonstige Daten
Layouts
gen-Ordner
Android Manifest
(XML-Datei)

Enthält die wichtigsten Informationen über eine App!
Das Android-System benötigt es, damit es die App ausführen kann.
Application
Permissions
Instrumentation
assets-Ordner
Layout Managers
Styles & Themes
Basic Components
Intents
Nachrichtendienst, für...
... Activities
... Services
... Brodcast-Receiver
... Content Provider
... Android System
implizite & explizite
Intents
Eigenschaften eines Intents
Intent Filter
Activities
definiert eine "View", zur Anzeige auf dem Screen
behandelt "Events" (z. B. Klick auf einen Button)
benutzt "Intents", um andere Activities zu starten

WICHTIG:
Jede Activity muss im Manifest eingetragen werden!!
Activity Lifecycle
Java Code
Activities aufrufen
Services
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Fragments
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Brodcasts
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Content Provider
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Sensors
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Dialogs, Toasts
&
Notifications
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Vereinigung von 87 Unternehmen (Google, Samsung, HTC...)
Ziel: Schaffung von offenen Standards für Mobilgeräte
gegründet von Google mit 33 Partnern am 5. Nov. 2007
Entwickler:
Open Handset Alliance
Marktanteile
Basiert auf Linux
Pro / Contra
Contra
Pro
Open Source
Personalisierbar
Etabliert
perfekte Google Einbindung
Open Source (leichter Sicherheits- mechanismen zu umgehen)
Kontrolle durch Google (Datenschutz)
Apps erscheinen sehr oft zuerst/nur auf iOS
Android Projects
Layouts
Android -Java
XML Editors
Graphical Layout Editor
Android Manifest Editor
Menu Editor
XML Resources Editor
SDK Tools für Eclipse
Hierarchy Viewer
ermöglicht es das User Interface bezüglich seines Aufbaus zu hin untersuchen und zu optimieren
Traceview
hilft beim Debuggen und beim kontollieren der Preformance
(zeigt graphisch eigen erstellte Logs dar)
LogCat
jede App und Systemprozess oder -dienst kann Einträge erstellen
Enträge können einem Entwickler bei der Fehlersuche helfen

zeigt Bildschirm als Bitmap an
ermöglicht es seine UI genau zu untersuchen
Pixel Perfect
DDMS
zeigt ganz genaue Systeminformationen von Android Devices
ermöglicht unzählige Stimulations Möglichkeiten (z.B. Anrufe)
Lint
ein Tool zur statischen Code-Analyse, welches den Code untersucht und Verbesserungsvorschläge liefert
ProGuard
verkleinert und optimiert nicht den Code
(kleinere APK, welche schwieriger zu Reserve-Engineering ist)
Verbesserung der Performance
Vermeidung von Bugs
Verbesserung der Sicherheit
Einhaltung von Ordnungsmäßigkeiten
Verbesserung der Benutzerfreundlichkeit
Systemlogbuch/Konsole von Android
(Teil des DDMS)
Android Emulator
1. USB Treiber Installieren
2. USB-Debugging am Android Device erlauben
Strings
Drawables
Jeder Ordner steht für eine ander Bildschirmauflösung!
Das System sucht sich dann zur Laufzeit selber heraus, welche Grafik am besten zu seinem Bildschirm passt!
Jeder Ordner steht für einen anderen "Systemzustand"!
Das System sucht sich dann zur Laufzeit selber heraus, welche Layout aktuell am besten zu seinem Bildschirm passt!
Wenn es kein bestimmtes findet nimmt es das nächst beste!
Jeder Ordner steht für einen anderen
"Systemsprache"!
Das System sucht sich dann zur Laufzeit selber heraus, welche Spraceh es benötigt!
Wenn es kein bestimmtes findet nimmt es das nächst beste!
Schnittstelle zwischen XML-/Resource-Dateien und Java-Code
(wird automatisch generiert!)
R.java
Die Datei stellt alle IDs von den Resourcen aus dem res-Ordner als Java-Variablen bereit.
BuildConfig.java
Zurzeit nur eine Variable, welche angibt ob sich die App noch in der Entwicklung befindet.

(Anwendungszweck: Eine Veröffentlichte App sollte keinen Logging-Code haben!)
Name
Icon

Activitys
Intent Filters

Jede App muss geanu definieren worauf sie zugreifen möchte!
Wenn dies hier vergessen wird, wird diese Funktion vom Android System bei dieser App blockiert!
Anmeldung von Entwickler-Tools.
Diese werden beim veröffentlichen der App dann automatisch aus dem Projekt entfernt!
zum Speichern sogenannter "raw asset files"

Assets bekommen im Gegensatz zu den Ressourcen im res-Ordner keine IDs zugewiesen (--> es ist schwerer sie zu referenzieren im Quellcode)
Daten im assets-Ordner müssen manuell als Byteströme ausgelesen werden und anschließend noch in die gewünschten Objekte (Audio, Video, Text, etc.) umgewandelt werden!

der assets-Ordner ist mehr wie ein Dateiverzeichnis und bietet daher mehr Freiheiten als der res-Ordner
zum Beispiel gut für Texturen und Spieldaten
Layout
(XML-Datei)
XML-Datei beginnt immer mit Deklaration, die der Anwendung mitteilen, wie es die Datei verarbeiten kann (XML-Version & Zeichensatz zum Encoden)
xmlns-Attribut definiert den Namensraum, welcher alleAndroid-XML-Befehle umfasst
Positionen/Größe
Size:

Die Höhe und Breite (Bsp.-Werte: "match_parent", "wrap_content", "20dp", [....])
Margin:
Der Abstand zur nächsten Layout-Component
Padding:
der Abstand zwischen dem äußeren Rand der Layout-Component und seinem Inhalt


Gravity:
Lage einer Component in einer Layout-Componente (Bsp.-Werte: "center", "top", "left", "center", "vertical", [...])
Layout-Templates
Layout Teile wieder verwenden

weitere Android-SDK Developer Tools
Draw 9-patch
Density Independent Pixel
virtuelle Pixel Einheit, um Layout-Größen oder -Positionen auf eine Density-Independent Weise zu definieren
ohne Unterstützung verschiedener Bildschirmgröße
mit guter Unterstützung verschiedener Bildschirmgröße
Screen size:
physikalische Bilschirmgröße
Screen density:
die Anzahl von Pixeln in einem bestimmten physikalischen Bereich (Pixeldichte)
Resolution:
die gesamte Anzahl an physikalischen Pixeln
ID
Bildschirmgrößen Einheiten
Layout-Component Position & Größe
android:id="@+id/
<gewünschte ID>
"
Layout-Component-ID definieren
auf Resourcen über die ID zugreifen
android:text="@string/
<String-ID>
"
Content Views
Layout Managers
LinearLayout
TabelLayout
RelativeLayout
GridLayout
FrameLayout
alle Layout-Components werden entweder untereinander oder nebeneinander angeordnet
android:orientation="vertical"
android:orientation="horizontal"
alle Layout-Components sind in einem Raster von Zeilen und Spalten angeordnet; jede Komponente kann sich sowohl über mehrere Spalten als auch Zeilen erstrecken
funktionell wie das TableLayout
erst ab API-Level 14
einfachere Verwendung als das TableLayout
Layout-Components können relativ zu jeder beliebigen anderen Layout-Component angeordnet werden
gute Performance dank flacher Layout Hierarchie
leichtere Unterstützung von Landscape & Portrait Mode
Stapelt alle Views und ViewGroups übereinander (Vorteil: z.B. immer nur ein Element zu einem Zeitpunkt sichtbar)
"android:layout_gravity": um die Position der Layout-Components zu bestimmen
Achtung:
Die Größe des FrameLayouts ist die Größe des größten Kindelements! (Folge: z.B. hochskalierte Bilder)
List View
zeigt eine Liste von
Scrollable-Items
die Daten können über eine
AdapterView
dynamisch zur Laufzeit verändert werden
GridView
zeigt Items in einer zweidimensionalen, scrollbaren Tabelle, die Daten können über eine
AdapterView
dynamisch zur Laufzeit verändert werden
Layouts mit einem Adapter bauen
Adapter ermöglichen es die angezeigten Daten von Views zur Laufzeit dynamisch zu verändern
Um einer AdapterView Daten zu geben, übergibt man ihm eine Instanz der Klasse Adapter!
Android bietet verschiedene Unterklassen von Adapter
(z.B. ArrayAdapter & SimpleCursorAdapter).
WebView
ermöglicht es eine Webseite in der App anzuzeigen
OnClickListener
1. Variable deklarieren, welche das Java-Gegenstück zur Layout-Component ist
2. Variable initialisieren mit hilfe der Methode findViewByID(<layoutComponentID>)
3. Listener registrieren
im Java-Code auf Ressourcen zugreifen
findViewByID(R.id.<componentID>)
Einstellungen/Menüs
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Threads
icon-sets
keyboards
sounds
wallpapers
font
Minimal UI
SwiftKey
Differnet Fonts
Resourcen auf dem Mobiltelefon sind limitiert --> Android-Betriebssystem muss in der Lage sein nicht aktive Activities zu beenden

Um Datenverlust zu vermeiden müssen die Daten gesichert werden, wenn die Activity pausiert oder gestoppt wird!

onCreate-Methode entspricht dem Konstruktor
XML-Code
Eine "Activity" repräsentiert genau ein sichtbares Benutzerinterface.
Navigation & Backstack
Unter-Activity, die antwortet
Unter-Activity aufrufen
Backstack
Navigation
Navigation zwischen den Activitis im Backstack
(aufruf der letzten offnen Activity)
logische Navigation
unabhängig vom Backstack
LogCat
Log-Einträge auslesen
mit Hilfe der DDMS
Ursprungs-Activity
Ursprungs-Activity
Unter-Activity
Unter-Activity
Ursprungs-Activity
Log-Methoden
geschieht mit Hilfe der statischen Methoden der Klasse "Log"
Log.d() = DEBUG
Log.e() = ERROR
Log.w() = WARN
Log.i() = INFO
Log.v() = VERBOSE
Log.wtf() = ASSERT
einfache Nachricht
(sollte nicht in der fertigen App enthalten sein)
Debug-Meldung,
um Fehler zu finden
Fehler-Meldung,
wenn ein Fehler auftritt
Warn-Meldung,
wenn etwas unerwartetes passiert, was aber noch kein Error ist
Informations-Meldung,
um nützliche Informationen zu loggen
Super-Fehler-Meldung, wenn ein Fehler auftritt der gar nicht auftreten kann
[je nach Systemeinstellugen wird ein Error-Report gesendet und die App sofort beendet]


Log-Eintrag erstellen
Java-Code
Log.d(<tag>, <msg>);
Konstannten, welche definieren, welche Log-Meldungen alle ausgegeben werden sollen.
Erzeugung der Log-Meldung, wenn sie dem Log-Level entspricht.
Layout-Component-Objects:
sonstige Ressourcen-Objects:
getResources().get<Typ>(R.<typ>.<ressourceName>)
implizite Intents
explizite Intents
Hinweis:
um das Log-Level zu bestimmen kann man ebenfalls die Konstante "DEBUG" aus der Klasse "BuildConfig" mit einbeziehen!
wichtige Grundlagen
einzelne ViewGroups
in Layouts zusammenführen
gesamte Layouts zusammenführen
ViewGroups (mehrere Layout-Components) können mit Hilfe des
<merge/>
Tag's zusammengefasst werden und mit Hilfe des
<include/>
Tag's in ein Layout eingefügt werden.
Ganze Layouts können mit Hilfe des
<include/>
Tag's in ein anderes Layout eingefügt werden.
Hinweis:
das
<include/>
Tag darf beim zusammenführen von Layouts Layout Attribute definieren um z.B. die Margin festzulegen.
Achtung:
auch wenn lediglich
android:layout_height
oder
android:layout_width
überschrieben werden sollen, muss man beide überschreiben
Layout aus Beispielen
button_ja_nein.xml
android_toll.xml /i_os_toll.xml
gesamt.xml
Styles
Themes
werden im
res-Ordner
in z.B. der Datei "
styles.xml
" verwaltet
Namen von Styles beginnen mit einem
Großbuchstaben
Look & Feel Attribute auslagern
für Layout-Cpmponents
für ganze Activities oder gar die ganze Anwendung
Vererbung
werden im
res-Ordner
in z.B. der Datei "
styles.xml
" verwaltet
Namen von Themes beginnen mit einem
Großbuchstaben
Hinweis:
Schriftgrößen sollten in der Einheit "
sp
" (Scale-Independent Pixels) angegeben werden!
Sie ähnelt der Einheit "dp" mit dem unterschied das neben der Screendensity auch die Schriftgrößeneinstellungen des Nutzers mit einbezogen werden.
Ressourcen-ID's:
R.<typ>.<ressourceName>
Ermöglichen...
... Activities aufzurufen
... Interaktion zwischen Anwen-dungen oder Teilen zweier verschiedener Anwendungen
[...]
Absichtserklärungen (Intentionen)
Bei einem expliziten Intent ist die Empfängerkomponente bereits bei der Programmierung des Aufrufs bekannt und eindeutig identifiziert.
Implizite Intents adressieren keinen bestimmten Empfänger sondern überlassen es allen Komponenten die "möchten" auf den Intent zu reagieren.
werden im Android-Manifest deklariert

action - Tag
category - Tag
data - Tag
legt fest unter welchen Bedingungen der Intent ausgeführt werden soll
URI ( UniformResource Identifier )
URI (UniformResource Identifier), welches eine Datenquelle spezifiziert


9-Patch Generator:

http://romannurik.github.io/AndroidAssetStudio/nine-patches.html
Styles werden einer Layout-Component über das Attribut "
style='@style/<gewünschter Style>'
" zugewiesen
Themes werden einer Activity oder gar der gesamten Application über das Attribut "
android:theme='@style/<gewünschtes Theme>'
" im "AndroidManifest.xml" zugewiesen
Innerhalb einer Datei:
mithilfe des Name-Attributes und der Punktnotation
Datei übergreifend:
mithilfe des Parent- Attributes
Full transcript