Skip to content

Proposition : publier Redface sur F-Droid #243

@XaaT

Description

@XaaT

Action par Claude Opus 4.6 (demandee par @XaaT)

Contexte

F-Droid est le catalogue d'apps Android open-source le plus utilise. Redface est sous licence Apache 2.0, son code est public — c'est un candidat naturel pour F-Droid. Ca permettrait aux utilisateurs qui n'ont pas le Play Store (ou qui le refusent) d'installer et mettre a jour Redface facilement.

Guide officiel de soumission : https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/

Analyse de faisabilite

Ce qui est deja pret

Critere Etat
Code source public (Git) ✅ GitHub ForumHFR/Redface
Licence FOSS (Apache 2.0)
Tags de version (v5.1.0, etc.)
Build Gradle avec applicationId com.ayuget.redface

Bloquant : Firebase

Redface inclut actuellement :

  • com.google.firebase:firebase-crashlytics
  • com.google.firebase:firebase-analytics
  • com.google.firebase:firebase-bom:28.4.2

F-Droid interdit strictement Firebase, Google Play Services, Crashlytics et tout SDK proprietaire de tracking/analytics. C'est eliminatoire — pas de contournement possible.

Source : https://f-droid.org/en/docs/Inclusion_Policy/

Solution proposee : build flavor fdroid

C'est la pratique standard. Ca ne touche pas du tout au build Play Store existant.

Dans app/build.gradle :

android {
    flavorDimensions "distribution"
    productFlavors {
        playstore {
            dimension "distribution"
        }
        fdroid {
            dimension "distribution"
        }
    }
}

dependencies {
    // Firebase uniquement pour playstore
    playstoreImplementation platform('com.google.firebase:firebase-bom:28.4.2')
    playstoreImplementation 'com.google.firebase:firebase-crashlytics'
    playstoreImplementation 'com.google.firebase:firebase-analytics'
}

Plus un sourceset app/src/fdroid/java/ avec un no-op pour remplacer les appels Crashlytics :

// app/src/fdroid/java/com/ayuget/redface/util/CrashReporter.java
public class CrashReporter {
    public static void log(String message) { /* no-op */ }
    public static void recordException(Throwable t) { /* no-op */ }
}

Et conditionner le plugin google-services au flavor playstore :

if (getGradle().getStartParameter().getTaskRequests().toString().contains("Playstore")) {
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'
}

Metadata upstream (recommandee)

Ajouter dans le repo Redface la metadata Fastlane que F-Droid recupere automatiquement :

fastlane/metadata/android/
  en-US/
    short_description.txt     # "Android client for the Hardware.fr forum" (max 80 chars)
    full_description.txt      # description longue
    changelogs/
      5101.txt                # changelog v5.1.0 (max 500 chars)
    images/
      icon.png
      phoneScreenshots/
        1.png
        2.png
  fr-FR/
    short_description.txt     # "Client Android pour le forum Hardware.fr"
    full_description.txt
    ...

Fichier metadata F-Droid

A creer dans le fork de gitlab.com/fdroid/fdroiddata :

# metadata/com.ayuget.redface.yml
Categories:
  - Internet
License: Apache-2.0
AuthorName: Ayuget
SourceCode: https://github.com/ForumHFR/Redface
IssueTracker: https://github.com/ForumHFR/Redface/issues
Changelog: https://github.com/ForumHFR/Redface/releases

RepoType: git
Repo: https://github.com/ForumHFR/Redface.git

Builds:
  - versionName: 5.1.0
    versionCode: 5101
    commit: v5.1.0
    subdir: app
    gradle:
      - fdroid

AutoUpdateMode: Version
UpdateCheckMode: Tags
CurrentVersion: 5.1.0
CurrentVersionCode: 5101

Pieges a anticiper

Piege Detail
google-services.json Ne doit PAS etre dans le sourceset fdroid. Conditionner le plugin au flavor playstore.
Signature APK F-Droid signe avec sa propre cle. Les users F-Droid ne pourront pas migrer depuis le Play Store sans reinstaller (signatures differentes). C'est normal et attendu.
JitPack RxActivityResult et rxpermissions viennent de JitPack. F-Droid a parfois des soucis avec JitPack. A tester dans le build Docker.
Build reproductible ButterKnife annotation processor peut causer des problemes de reproductibilite. A verifier.

Plan d'action

Etape Qui Bloquant
1. Creer flavor fdroid sans Firebase PR sur ce repo OUI
2. Ajouter metadata Fastlane PR sur ce repo Non (recommande)
3. Verifier ./gradlew assembleFdroidRelease compile CI ou local OUI
4. Fork fdroiddata + creer metadata YAML N'importe qui -
5. Tester le build en Docker fdroidserver N'importe qui Recommande
6. Ouvrir MR sur gitlab.com/fdroid/fdroiddata N'importe qui -

Seul vrai bloquant : le flavor fdroid sans Firebase. Le reste est de la plomberie. Si le flavor est accepte, la soumission F-Droid est faisable en 1-2 jours de travail.

Alternatives considerees

Option Verdict
Supprimer Firebase completement Possible mais perte de crash reporting pour le Play Store
Remplacer Firebase par ACRA (FOSS) Bon compromis mais plus de travail
Ne rien faire Redface reste indisponible pour les users sans Play Store

Je suis pret a faire le PR pour le build flavor fdroid si @music4music est d'accord avec l'approche.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions