1. Grundlagen Android-Entwicklung
1.1. Was ist Android?
-
OS- und Programmierplattform von Google für mobile Geräte entwickelt.
-
Basiert auf Linux-Kernel und Java
1.2. Warum Android?
-
Populärste Plattform für mobile Apps
-
Einfach zu entwickelnde Apps
-
Viele Verteilungsmöglichkeiten
1.3. Wie funktioniert Android?
-
Deine Apps leben hier zusammen mit den System-Apps (E-Mail, SMS, …)
-
UI Komponenten, Ressourcen-Management, Lifecycle-Management. Stellt native Bibliotheken für die App zur Verfügung.
-
Jede App läuft in ihrer eigenen Instanz der Android Runtime.
-
Stellt Hardware-Abstraktionen zur Verfügung. Jede App hat Zugriff auf die Hardware, aber nur über die API.
-
Foundation. Kümmert sich um threading, low-level memory management, etc…
2. Android Studio IDE
Installation unter: https://developer.android.com/studio/install
Hausübung: Installieren und auf die neueste Version updaten. |
3. Kotlin Grundzüge
3.1. Kotlin
Seit 2019 ist Kotlin die bevorzugte Programmiersprache für Android-Apps bei Google Seitdem ist die Sprache sehr populär geworden
3.2. Java vs. Kotlin
3.2.1. Null Safety
Java | Kotlin |
---|---|
Jedes Objekt ist null by default public Integer number; |
Kein Objekt kann null werden
…außer man gibt es so an:
|
3.2.2. Extension Functions
Java | Kotlin |
---|---|
Ohne Erweiterung (z.B. Project Lombok) nicht verfügbar. (Ev. noch über Vererbung… Aber nicht jedes zu erweiternde Projekt gehört auch euch.) |
Standardmäßig in die Sprache eingebaut. Einfach den Funktionsnamen in jedem beliebigen File mit dem jeweiligen Klassennamen prefixen.
|
3.2.3. Code
Java |
Kotlin |
|
⇒ Besser zu erstellen, lesen und zu warten. |
3.2.4. Coroutines
Java | Kotlin |
---|---|
Background Threads. (z.B.: ExecutorService) |
Output: Hello World! |
3.2.5. Data Classes
Java | Kotlin |
---|---|
|
|
3.2.6. Smart Casts
Java | Kotlin |
---|---|
Entwickler muss die Typen überprüfen und angeben. |
|
3.2.7. No Checked Exceptions
Java | Kotlin |
---|---|
Es gibt checked Exceptions. (Meiner Meinung nach ist das eine gute Sache) |
Es gibt keine checked Exceptions. (Meiner Meinung nach eine schlechte Sache, weil … nun … exception handling ist wichtig und sollte nicht optional sein.) |
3.2.8. Higher-Order Funcs und Lambdas
Java | Kotlin |
---|---|
In abgespeckter Form verfügbar oder mit alten Sprachkonstrukten nachgebaut. |
Inherent in Sprache enthalten.
|
3.3. Übung
Spielwiese unter: https://play.kotlinlang.org/koans/overview
Hausübung: Alle Aufgaben auf dieser Seite links durchmachen. Android-Studio herunterladen: https://developer.android.com/studio/releases |
4. Komponenten einer Android-App
4.1. AndroidManifest.xml
Jedes Android-App-Projekt muss dieses File im Root des Projekt-Source-Sets enthalten. Es enthält wichtige Informationen über die App für:
-
Build Tools
-
The Android Operating System
-
Google Play
Ist eine XML-Datei, die die Struktur der App beschreibt. Ist XML, damit sie leichter von Menschen gelesen und ohne Editor geändert werden kann. Wird beim Kompilieren in ein binäres Format übersetzt (wegen Geschwindigkeit).
Es enthält Informationen über die Applikation:
-
functions
-
services
-
broadcast receivers
-
content producers
-
components
-
The apps permissions
-
The apps rights (permissions, die andere Apps brauchen werden, damit sie von eurer App Daten bekommen können.)
4.2. Application Components
-
Fragments
Teile einer Maske, die innerhalb einer Activity verwendet werden können.
-
Views und ViewGroups
Views sind GUI-Elemente. ViewGroups sind Container für Views.
-
Layouts
XML Files, die die Struktur der Activities, Fragments und ViewGroups beschreiben.
-
Resources
Images, Strings, UI Layouts…
-
Manifest
Explained above.
5. Meine erste Android-App
Erstmal Android Studio herunterladen und installieren, falls dies nicht schon erfolgt ist. https://developer.android.com/studio/releases
6. Jetpack Compose
Modernes UI Toolkit für Android-Entwicklung. Reactive Programming Model. Verwendet Kotlin Sprachkonstrukte. Vollständig deklarativ wie flutter, Swift UI oder React Native (sag ihm WAS du willst, nicht WIE du es willst).
…beschreibt die UI als Funktion, die Daten in eine UI-Hierarchie transformiert …wenn sich die Daten ändern, ruft das Framework diese Funktionen automatisch auf und aktualisiert so die UI
6.1. Mein erster Knopf in Jetpack-Compose
6.1.1. Neues Projekt anlegen
In der Android Studio IDE, ist ein Projekt-Template eine Android-App, die alle notwendigen Teile hat, um eine Applikation zu erstellen. Es hilft dir, ein neues Projekt einzurichten.
Schritt für Schritt werden wir unsere erste Android-App erstellen und sie auf dem Emulator starten:
-
Android Studio starten, indem du auf das Android Studio Icon in deinem Dock oder wo auch immer du Android Studio gespeichert hast, klickst.
-
Wenn Android Studio startet, klicke auf "Start a new Android Studio project" am Welcome-Screen. Alternativ kannst Du auch auf File und dann New Project klicken.
-
Klicke auf "Empty Activity" und klicke dann auf Next. (Compose ist inzwischen Standard)
Wenn der leere Compose Activity Screen geladen hat, wirst Du Felder sehen, wie 'Name', 'Package name', 'Save location', 'Language', und 'Minimum SDK'. Für dieses Kapitel nennen wir unser Projekt 'Android Community' und lassen die anderen Einstellung in Ruhe. Die Sprache ist per Voreinstellung auf Kotlin. Minimum SDK ist API 21: Android 5.0 (Lollipop). Das ist die minimale Version von Android, auf der unsere App laufen können wird. In diesem Fall wird unser Projekt auf ca. 98.8% aller Android-Geräte laufen können. Die Einstellungen im Bild unten, wie der Name und das Package, sind nur Beispiele. Du kannst Deine eigenen Werte eingeben oder es einfach so lassen, wie es voreingestellt ist.
Jetzt auf 'Finish' klicken.
Jetzt kannst Du Dich ein wenig in den Packages umsehen. Dir wird auffallen, dass es eine 'MainActivity' Klasse gibt, die von 'Activity' ableitet. Darin gibt es eine fun (Function) 'onCreate', die eine Methode in 'ComponentActivity' überlädt.
Du wirst auch eine Funktion 'setContent' sehen, die den Inhalt einer Composable Funktion setzt. Sie nimmt einen Lambda-Ausdruck, die die Elemente enthält, die angezeigt werden sollen. In unserem Fall enthält er das Theme unserer Applikation.
In der 'Greeting' Funktion werden wir jetzt unsere eigene Grußformel "Hello, Android Community" einsetzen und das Programm ausführen (run).
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AndroidCommunityTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Greeting("Hello, Android Community")
}
}
}
}
}
7. Android Project Structure
Das ist das Projekt-Root-Verzeichnis. Es enthält alle Dateien, die für das Projekt wichtig sind.
7.1. Manifest Ordner
Der Manifest-Ordner ist die Quelle der Wahrheit für die Android-App; er enthält AndroidManifest.xml. Klicke auf AndroidManifest.xml, um es zu öffnen und Dir den Inhalt anzusehen.
Das Java-Verzeichnis enthält alle Kotlin- (.kt) und Java-Dateien (.java), die wir erstellen, wenn wir unsere Android-Apps erstellen. Beispielsweise, im nächsten Bild, haben wir ein Package mit (androidTest) und (test), und hier fügen wir unsere Tests hinzu. Klicke einfach einmal alle Verzeichnisse durch um deren Inhalt zu sehen.
Im AndroidTest-Verzeichnis haben wir unsere UI-Tests, und im Test-Verzeichnis haben wir unsere Unit-Tests. Unit-Tests testen kleine Teile unseres Codes, um sicherzustellen, dass das gewünschte Verhalten wie erwartet ist. Test-Driven Development (TDD) ist während der App-Entwicklung hervorragend und wertvoll. Einige Unternehmen folgen dieser Regel, andere nicht. Aber grundsätzlich ist es eine gute Praxis, den Code immer zu testen.
Das res-Verzeichnis enthält XML-Layouts, UI-Strings, drawable-Images und Mipmap-Icons. Auf der anderen Seite enthält das values-Verzeichnis viele nützliche XML-Dateien wie Dimensionen, Farben und Themes. Klicke auf das res-Verzeichnis, um Dich mit dem vertraut zu machen, was dort ist, da wir es im nächsten Kapitel verwenden werden.
Zuletzt, im Gradle-Scripts Verzeichnis, haben wir die build-Konfiguration, die die beschreiben auf welche Art unser Projekt gebaut werden soll für unser Projekt enthalten. Es ist in Module aufgeteilt und die Einträge in der obersten Datei gelten für alle Module.
Ein Modul ist eine Sammlung von Source-Dateien und Build-Einstellungen, die es Dir ermöglichen, Dein Projekt in verschiedene Einheiten mit bestimmten Zwecken zu unterteilen.