1 Android Build
mrrmlab Wiki edited this page 2026-05-02 18:03:36 +02:00
This file contains ambiguous Unicode characters

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.jsonversion 1.0.0
versionCode git rev-list --count HEAD 312

Neue Version veröffentlichen:

  1. apps/mobile/package.jsonversion erhöhen (semver)
  2. apps/mobile/metadata/en-US/changelogs/default.txt aktualisieren
  3. 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

  1. apps/mobile/metadata/en-US/changelogs/default.txt manuell pflegen
  2. CI kopiert ihn als fdroid-changelog-{versionCode}.txt auf den Server
  3. fdroid-update-Step verschiebt ihn nach: fdroid/metadata/de.mrrm.mrrmlab/en-US/changelogs/{versionCode}.txt
  4. fdroid update liest 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.