- Kotlin 87.3%
- Makefile 6.9%
- Dockerfile 5.8%
|
Some checks failed
CI / build (push) Failing after 0s
assembleRelease/Debug logged a 4x advisory nagging to enable android.dependency.excludeLibraryComponentsFromConstraints (a perf tweak only relevant for very large projects). Suppress it via android.generateSyncIssueWhenLibraryConstraintsAreEnabled=false, which removes the warning without changing dependency resolution. The remaining warnings (builtInKotlin/newDsl deprecation, obsolete applicationVariants/testVariants APIs) are the documented kotlin-android + KSP/Room workaround and cannot be removed until KSP supports AGP's built-in Kotlin. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| app | ||
| docker | ||
| docs/superpowers | ||
| gradle/wrapper | ||
| .dockerignore | ||
| .gitignore | ||
| build.gradle.kts | ||
| compose.yml | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| Makefile | ||
| README.md | ||
| settings.gradle.kts | ||
Share Catcher
Android-App, die sich in den Teilen-Dialog (z. B. von YouTube Music) einklinkt, geteilte Links lokal speichert und sie in einer zeitlich absteigenden Liste anzeigt. Ein Tippen öffnet den Link erneut (z. B. um einen Song an der zuletzt geteilten Position fortzusetzen).
Voraussetzungen
Es wird kein lokales JDK/SDK benötigt — der komplette Build läuft in einem Docker-Container. Nötig ist nur:
- Docker (inkl.
docker compose) - make (optional, vereinfacht die Aufrufe)
Beim ersten Lauf lädt das Image JDK 21 + Android-SDK; der erste Build zieht zusätzlich die Gradle-Distribution und alle Dependencies (danach im Cache).
Build & Test
make image # Docker-Image einmalig bauen
make test # Unit-/Robolectric-Tests
make apk # Debug-APK
make check # Tests + Lint
make lint # nur Lint
make clean # Build-Outputs löschen
make tasks # alle Gradle-Tasks auflisten
make shell # interaktive Shell im Container
Beliebiger Gradle-Task:
make gradle ARGS="dependencies --configuration debugRuntimeClasspath"
Alle Targets laufen über die containerisierte Gradle aus compose.yml. make
ohne Argument zeigt die Übersicht.
Release-APK (signiert)
Die Release-Signierung wird vollständig über Umgebungsvariablen gesteuert —
Keystore und Passwörter landen niemals im Repository (durch .gitignore
ausgeschlossen). Fehlt der Keystore, bleibt der Release-Build automatisch
unsigniert statt zu scheitern.
1. Keystore einmalig erzeugen
make keystore
Startet keytool interaktiv im Container und legt
docker/share-catcher.keystore an (du wirst nach Store-/Key-Passwort und
Zertifikatsdaten gefragt).
2. Signierte APK bauen
make release KEY_ALIAS=share-catcher \
KEYSTORE_PASSWORD=<store-passwort> \
KEY_PASSWORD=<key-passwort>
Die Variablen können auch davor gesetzt werden
(KEYSTORE_PASSWORD=… make release) — beide Schreibweisen funktionieren.
Ergebnis: app/build/outputs/apk/release/app-release.apk
| Variable | Bedeutung | Standard |
|---|---|---|
KEYSTORE_FILE |
Pfad zum Keystore im Container | /workspace/docker/share-catcher.keystore |
KEYSTORE_PASSWORD |
Passwort des Keystores | — (Pflicht) |
KEY_ALIAS |
Alias des Schlüssels | — (Pflicht) |
KEY_PASSWORD |
Passwort des Schlüssels | — (Pflicht) |
Hinweis: Die Warnung
Unable to strip … libandroidx.graphics.path.sobeim Release-Build ist unkritisch — dem Image fehlen die NDK-Strip-Tools, die Bibliothek wird ungestrippt mitverpackt.
Installation auf einem Gerät
Die gebauten APKs liegen je nach Variante unter:
- Debug:
app/build/outputs/apk/debug/app-debug.apk - Release:
app/build/outputs/apk/release/app-release.apk
Das Aufspielen läuft über adb aus den Android-SDK platform-tools (nicht im
Container — das ist lokales Werkzeug). Liegt adb nicht im PATH, mit vollem
Pfad aufrufen, z. B. ~/Android/Sdk/platform-tools/adb.
# Installieren bzw. aktualisieren (-r = vorhandene Installation überschreiben)
adb install -r app/build/outputs/apk/release/app-release.apk
# Deinstallieren (löscht auch die App-Daten, also die gespeicherten Links)
adb uninstall im.fischer.sharecatcher
Hinweis: Debug- und Release-APK sind unterschiedlich signiert. Ist bereits die jeweils andere Variante installiert, schlägt
installmitINSTALL_FAILED_UPDATE_INCOMPATIBLEfehl — dann zuerstadb uninstall, dann neu installieren.