Skip to content

Kotlin & Android: Performance, fortgeschrittenes Compose und Produktionstiefe (LRN-8) - #27

Open
hernstev97 wants to merge 2 commits into
mainfrom
feat/lrn-8-kotlin-android-depth
Open

hernstev97 wants to merge 2 commits into
mainfrom
feat/lrn-8-kotlin-android-depth

Conversation

@hernstev97

Copy link
Copy Markdown
Owner

Schließt die Lücken aus LRN-8 im Kurs Kotlin & Android: Performance und Debugging, fortgeschrittenes Compose und mehr Produktionstiefe in Navigation, Daten, Tests, Architektur und Build. Der Abgleich mit content/kotlin am 22.10.2026 hat alle Lücken der Analyse vom 30.09. bestätigt; der Kurs war bei den Versionen schon aktuell (AGP 9.4, Kotlin 2.4, BOM 2026.09.00, Room 3).

Was neu ist

Drei neue Module (Level 3):

Modul Platz Lektion Übungen
Compose fortgeschritten: Animation, Layout, Zeichnen, Gesten Unterwegs 402 Zeilen, 2 615 Wörter 14
Performance & Debugging: Spuren lesen Unterwegs 282 Zeilen, 2 391 Wörter 14
Performance messen: Inspector, Profiler, Benchmarks, Baseline Profiles Am PC 286 Zeilen, 2 145 Wörter 15

Ausgebaut (alle jetzt „Am PC“):

Modul Neu Lektion (Zeilen) Übungen
navigation verschachtelte Graphen, graph-scoped ViewModels, Ergebnisse, Bottom-Bar mit mehreren Backstacks, Predictive Back, Einordnung Navigation 3 167 → 312 10 → 16
compose-state State Holder mit Saver, remember mit Keys, DisposableEffect, rememberCoroutineScope, produceState, snapshotFlow 167 → 306 10 → 15
daten-netzwerk Room-3-Relationen und Indizes, OkHttp-Interceptor, Token-Refresh mit Authenticator, Paging 3 mit RemoteMediator, Konfliktauflösung 284 → 541 13 → 18
testing MockWebServer (mockwebserver3), TestListenableWorkerBuilder, Hilt-Tests mit @TestInstallIn 285 → 438 13 → 18
architektur Modularisierung als eigener Abschnitt mit vier Übungen 334 → 402 13 → 17
gradle-release Convention Plugins in build-logic 302 → 424 13 → 17

Dazu: sechs neue Abnahmekriterien und zwei neue Meilensteine im Abschlussprojekt (Module, Flavors staging/prod, R8, gemessenes Baseline Profile, Lint-/detekt-Gate, interner Test-Track), 12 neue Interview-Karten (48 → 60), 12 Glossarbegriffe (48 → 60), Spickzettel, Lernplan (12 → 14 Wochen), Lernziele. Kotlin-Bereich: 26 → 29 Module, 299 → 371 Übungen (mit Bear-Track).

Entscheidungen

  • Drei statt zwei neue Module. Ein Modul trägt genau eine Platzmarke (HANDBUCH §5). Spuren lesen geht im Bus, Messen mit Profiler und Macrobenchmark braucht den PC. Deshalb ist „Performance & Debugging“ geteilt.
  • Ausgebaute Module tragen „Am PC“. Jedes endet mit einer bestehenden Praxisaufgabe in Android Studio. Die bleibt, damit sich keine Übungs-ID ändert. Die Lektionen lassen sich trotzdem überall lesen.
  • Schmale Codeblöcke in den Unterwegs-Modulen: höchstens 34 Zeichen in der Lektion, 35 in Übungen, zwei Leerzeichen Einrückung (die Lektion sagt, dass Android Studio auf vier formatiert). Sortier-Übungen dort sind Text, der umbricht, weil Code-Karten bei 360 px nur etwa 22 Zeichen zeigen.
  • Diagnose-Übungen nutzen vorhandene Übungsarten (choice, output, bug, explain, order, practice) mit vorbereiteten Ausgaben. Der Typ scenario aus LRN-22 läuft nur in der Linux-VM. Trace-Ausschnitte sind als Text abgeschrieben, mit echten Slice-Namen aus Compose 1.12.1 (Recomposer:recompose, Compose:recompose, AndroidOwner:draw). Die Logcat-Formate für „Displayed …“ und StrictMode stammen aus dem AOSP-Quelltext.
  • Nur zwei Übungen entfallen: navigation/stack-modell und navigation/route-copy, wie im Issue verlangt. Alle anderen 297 Übungen haben denselben Fingerprint wie auf main (geprüft mit dem Content-Loader).
  • Drei Modultitel angepasst, weil sie den neuen Inhalt nicht mehr nannten (daten-netzwerk, testing, architektur); IDs bleiben.
  • Heißstart-Schwelle: Die Play-Console-Hilfe nennt 1 s, die Android-Doku 1,5 s. Die Lektion nennt beide Quellen, statt eine zu wählen.
  • detekt: Die stabile Linie 1.23.8 ist älter als Kotlin 2.4, detekt 2.0 ist noch Alpha. Das Abnahmekriterium verlangt deshalb „detekt oder ktlint“.
  • KI-Regel: Keine Lösung und kein Hinweis lautet „lass es die KI erzeugen“. Die PC-Praxisaufgaben sagen ausdrücklich, dass Code, Messung und Deutung selbst geschrieben werden.

Wie geprüft

  • Kotlin kompiliert und ausgeführt in einem Scratch-Android-Projekt im Worktree (nicht eingecheckt): SDK 37, Gradle 9.8.0, JDK 21, AGP 9.4.1, Kotlin 2.4.21, Compose-BOM 2026.09.00, Navigation 2.10.2, Paging 3.5.3, Room 3.0.3, Hilt 2.60.1, androidx.hilt 1.4.0, Benchmark 1.5.0, OkHttp 5.5.1, Retrofit 3.0.0, WorkManager 2.12.0, material3-adaptive 1.3.0. Kompiliert: die Lektions- und Übungsausschnitte aller neuen Abschnitte, ein Benchmark-Modul (com.android.test) mit Macrobenchmark und BaselineProfileRule, build-logic mit zwei Convention Plugins, ein Bibliotheksmodul mit internal-Implementierung und Hilt-Bindung, ein instrumentierter Hilt-Test mit eigenem Runner.
  • Verhalten mit JVM- und Robolectric-Tests belegt (34 Tests, alle grün, davon 3 von der Review): Strong Skipping (Klassen mit var und aus Modulen ohne Compose-Compiler komponieren neu, List vergleicht mit equals), pointerInput-Keys bei Wiederverwendung und Wechsel an Ort und Stelle, Flow-Invariante, alle Backstack-Folgen der neuen Navigations-Übungen mit TestNavHostController, remember mit Keys, nächster CompositionLocal-Provider, Authenticator (einmal erneuern, danach aufgeben; ohne wirksame Grenze „Too many follow-up requests: 21“), Paging-Fehler mit params.loadSize, feldweises Zusammenführen, MockWebServer, TestListenableWorkerBuilder, @TestInstallIn, Retrofit-Pfad mit führendem /. Gradle- und Compilermeldungen in Bug-Übungen sind echte Ausgaben.
  • Fakten gegen developer.android.com, kotlinlang.org, docs.gradle.org, AndroidX-Release-Notes, dagger.dev, perfetto.dev, Play-Console-Hilfe und AOSP geprüft; 114 neue Links samt Anker antworten mit 200. square.github.io/okhttp ist derzeit 404; die OkHttp-Links zeigen auf die Doku im GitHub-Repository.
  • pnpm content:check (keine Hinweise für Kotlin), pnpm verify kotlin, pnpm test (329 bestanden), pnpm lint, pnpm build, pnpm bear:check: grün.
  • Im Browser durchgeklickt, auch mobil: alle Lektionen und Übungsseiten der neun Module auf 1280 px, die zwei Unterwegs-Module auf 360 px ohne seitlich scrollende Codeblöcke. Je eine Übung jeder Art gelöst (Auswahl, Sortieren, Vorhersage, Lücke, Fehler samt Korrektur, Befehl, Erklären, Praxis), keine Konsolenfehler.
  • Unabhängige Review vor dem PR (eigener Agent mit Zugriff auf Scratch-Projekt und Doku): 6 Muss-, 14 Soll- und 6 Kann-Befunde, alle eingearbeitet und nachgeprüft. Die wichtigsten: pointerInput(Unit) veraltet nur bei Wechsel an derselben Stelle oder in Listen ohne Keys (Beispiel und Bug-Übung neu); Room warnt doch bei Fremdschlüssel ohne Index; LeakCanary bricht im Release-Build den Start ab; benchmarkRelease übernimmt die Release-Signatur; Android vitals bewertet die TTID; eine Bug-Übung mit zwei richtigen Zeilen ist jetzt eindeutig. Der Commit „Befunde der unabhängigen Review eingearbeitet“ listet alles.
  • E2E: Im Gesamtlauf von pnpm test:e2e scheiterten 3 von 59 Tests: zwei PostgreSQL-Laufzeittests („Die Anweisungen konnten nicht ausgeführt werden“) und real content fits phone, tablet and desktop viewports (LRN-31). Einzeln wiederholt bestanden alle drei, der Viewport-Test über alle echten Seiten auf 360, 768 und 1440 px. Den Viewport-Test fasse ich hier nicht an (LRN-31). Der PR ändert nur Inhalte, keinen Code.

Screenshots

Lernpfad, Desktop Lernpfad, Handy
Neue Module mit Marken „Am PC“ und „Unterwegs“ im Lernpfad Lernpfad auf 360 px mit der Marke „Unterwegs“
Compose-Lektion, Handy Trace-Übung, Handy
Eigenes Layout als Codeblock, passt ohne Scrollen auf 360 px Auswahl-Übung mit abgeschriebenem Trace-Ausschnitt

Neue Navigations-Übung: Backstack nach popUpTo vorhersagen, gelöst

Kopf des PC-Moduls „Performance messen“ mit Marke „Am PC“

Überschneidungen

Keine Änderungen an HANDBUCH.md, README.md oder Code, deshalb keine Konflikte mit #21–#26. Die Regel „höchstens 34 Zeichen pro Codezeile in Unterwegs-Modulen“ steht noch nicht im Handbuch; das wäre eine eigene Entscheidung.

LRN-8 steht bis zum Merge auf „In Review“.

🤖 Generated with Claude Code

hernstev97 and others added 2 commits October 22, 2026 20:10
…onstiefe (LRN-8)

Drei neue Module: "Compose fortgeschritten" (Animation, eigene Layouts,
Zeichnen, Gesten, CompositionLocal, WindowSizeClass, AndroidView) und
"Performance & Debugging: Spuren lesen" laufen unterwegs auf 360 px;
"Performance messen" (Layout Inspector, Profiler, Macrobenchmark,
Baseline Profiles, Debugger, Logcat, StrictMode, LeakCanary) ist für den PC.

Ausgebaut: navigation (verschachtelte Graphen, graph-scoped ViewModels,
Ergebnisse, Bottom-Bar mit mehreren Backstacks, Predictive Back; die
Übungen stack-modell und route-copy sind durch Übungen zur Navigation-API
ersetzt), compose-state (State Holder mit Saver, remember mit Keys,
DisposableEffect, rememberCoroutineScope, produceState, snapshotFlow),
daten-netzwerk (Room-3-Relationen und Indizes, Interceptor, Authenticator,
Paging 3 mit RemoteMediator, Konfliktauflösung), testing (MockWebServer,
TestListenableWorkerBuilder, Hilt-Tests), architektur (Modularisierung)
und gradle-release (Convention Plugins). Das Abschlussprojekt bekommt
sechs neue Abnahmekriterien mit neuen IDs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- pointerInput: veraltete Werte entstehen nur bei Wechsel an derselben
  Stelle oder in Listen ohne Keys; neues Beispiel (Markierung in einer
  Skizze, braucht die Tippposition) und neue Bug-Übung dazu.
- Room warnt beim Build bei Fremdschlüssel ohne Index; @Relation-Arrays
  sind die Room-3-Änderung, ForeignKey nicht.
- Authenticator-Bug: fehlendes return statt unrealistischer Zählung,
  echte Compilerwarnung „Expression is unused.“.
- LeakCanary im Release bricht den Start ab; benchmarkRelease übernimmt
  die Release-Signatur; Android vitals misst die TTID; Heißstart-Schwelle
  mit beiden offiziellen Quellen (1 s / 1,5 s).
- Leak-Spur, Zeilennummern, Absturzbericht, Report-Einrückung,
  Navigations-Ausgaben, snapshotFlow-Text, Compile-Avoidance, Convention
  Plugins vs. subprojects, MockWebServer-Paket, compose-grundlagen-
  Begründung zu List (nur Erklärung, Fingerprint unverändert).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 22, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ad1f6a6e-7ffa-4e10-986a-e6d33f120852
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hernstev97

Copy link
Copy Markdown
Owner Author

CI-Stand: check (Lint, Typecheck, Unit-Tests, content:check, bear:check, Build), verify und convex sind grün. e2e ist rot, und damit ci-ok: Gescheitert ist nur real content fits phone, tablet and desktop viewports, der Test aus LRN-31, der auch im letzten Nachtlauf auf main scheitert (Run 39741219002, dort mit noch mehr Fehlern). Der pytest-Test war einmal wackelig und lief in der Wiederholung grün. Lokal bestand der Viewport-Test einzeln über alle echten Seiten auf 360, 768 und 1440 px. Ich fasse ihn hier wie vereinbart nicht an.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant