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.
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
v5.1.0, etc.)applicationIdcom.ayuget.redfaceBloquant : Firebase
Redface inclut actuellement :
com.google.firebase:firebase-crashlyticscom.google.firebase:firebase-analyticscom.google.firebase:firebase-bom:28.4.2F-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
fdroidC'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 :Et conditionner le plugin
google-servicesau flavorplaystore:Metadata upstream (recommandee)
Ajouter dans le repo Redface la metadata Fastlane que F-Droid recupere automatiquement :
Fichier metadata F-Droid
A creer dans le fork de
gitlab.com/fdroid/fdroiddata:Pieges a anticiper
google-services.jsonfdroid. Conditionner le plugin au flavorplaystore.RxActivityResultetrxpermissionsviennent de JitPack. F-Droid a parfois des soucis avec JitPack. A tester dans le build Docker.Plan d'action
fdroidsans Firebase./gradlew assembleFdroidReleasecompileSeul vrai bloquant : le flavor
fdroidsans 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
Je suis pret a faire le PR pour le build flavor
fdroidsi @music4music est d'accord avec l'approche.