This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Android-Build & F-Droid
Überblick
Die mrrmlab Android-App wird durch Drone CI gebaut, signiert und automatisch im selbst gehosteten F-Droid-Repository veröffentlicht.
Build-Pipeline (publish-apk)
1. pnpm install (Monorepo-Abhängigkeiten)
2. turbo build --filter=@mrrmlab/shared-types
3. ANDROID_VERSION_CODE=$(git rev-list --count HEAD)
4. expo prebuild --clean --platform android
5. Keystore dekodieren (base64 Secret → /tmp/release.jks)
6. Keystore zu Legacy-PKCS12 konvertieren (JDK17-Kompatibilität)
7. gradlew assembleRelease
8. APK umbenennen: mrrmlab-{VERSION}-{SHA}.apk
9. Changelog kopieren: fdroid-changelog-{VERSION_CODE}.txt
10. SCP: APK + Changelog → Server
11. fdroid update (Index neu generieren)
Versionierung
| Feld | Quelle | Beispiel |
|---|---|---|
versionName |
apps/mobile/package.json → version |
1.0.0 |
versionCode |
git rev-list --count HEAD |
312 |
Neue Version veröffentlichen:
apps/mobile/package.json→versionerhöhen (semver)apps/mobile/metadata/en-US/changelogs/default.txtaktualisieren- Commit + Push auf
main→ CI baut automatisch
APK-Signierung
Keystore liegt auf dem Server unter /opt/server-stack/mrrmlab-app.jks.
Keystore für Drone CI kodieren:
base64 -w 0 /opt/server-stack/mrrmlab-app.jks
# Output als Secret android-keystore-base64 in Drone hinterlegen
Besonderheit: JDK 17 erstellt PKCS12-Keystores mit SHA-256 HMAC. AGP (Android Gradle Plugin) verwendet eine ältere Bouncy-Castle-Version die das nicht unterstützt. Deshalb wird der Keystore vor dem Build in Legacy-Format (3DES/SHA-1) konvertiert.
F-Droid Distribution
Selbst gehostetes Repository
- URL:
https://fdroid.mrrm.de/repo - Paket-ID:
de.mrrm.mrrmlab - Metadata:
infra/fdroid/metadata/de.mrrm.mrrmlab.yml
Changelog-Workflow
apps/mobile/metadata/en-US/changelogs/default.txtmanuell pflegen- CI kopiert ihn als
fdroid-changelog-{versionCode}.txtauf den Server fdroid-update-Step verschiebt ihn nach:fdroid/metadata/de.mrrm.mrrmlab/en-US/changelogs/{versionCode}.txtfdroid updateliest den Changelog und zeigt ihn in der F-Droid-App an
App in F-Droid hinzufügen (Nutzer-Sicht)
Siehe App-Installation
Gradle-Konfiguration
Relevante Flags für den CI-Build (Ressourcen-Einschränkungen):
-Xmx1g -XX:MaxMetaspaceSize=512m # JVM-Speicherlimit
--max-workers 1 # Kein paralleles Gradle
--no-daemon # Kein persistenter Daemon
-PreactNativeArchitectures=arm64-v8a # Nur ARM64 (spart 3×Build-Zeit)
CMAKE_BUILD_PARALLEL_LEVEL=1 # Kein paralleles CMake
Android Builder Docker Image
infra/android-builder/Dockerfile enthält:
- JDK 17 (eclipse-temurin:17-jdk-jammy)
- Android SDK 36, Build Tools 36.0.0
- Android NDK 27.1.12297006
- CMake 3.22.1
- Node 24 + pnpm 9.15.0
Image: git.mrrm.de/admin-mrrm/mrrmlabapp/android-builder:latest
Wird nur neu gebaut wenn infra/android-builder/Dockerfile geändert wird.