Eigene App in den F-Droid Store hochladen

Hallo Leute,

ich habe vor einigen Tagen erfolgreich meine erste Android App in den alternativen Appstore „F-Droid“ hochgeladen. F-Droid ist ein Appstore, in dem freie Software (FOSS) zur Verfügung gestellt wird.

Personen, die ihre selbstentwickelte FOSS App in den F-Droid-Store hochladen möchten, können sich hier eine Schritt-für-Schritt Anleitung anschauen.

Bevor man die folgenden Schritte befolgt, sollte man sich noch die zwei Artikel zum Einstellen von Apps durchlesen:

1. Anmeldung auf Gitlab.com

Das F-Droid Repository, welches die Informationen zu allen Apps enthält, wird auf GitLab.com verwaltet. Das bedeutet, dass ihr euch bei diesem kostenlosen Dienst anmelden müsst.

2. Repository forken

Das Repository „F-Droiddata“ muss geforkt werden. Nach dem Login auf GitLab.com und dem öffnen des Links, solltet ihr auf der rechten Seite im Menu einen Button „Fork“ finden.

Es kann einige Sekunden dauern bis das Repository in eurem Account auftaucht.

3. Repository clonen und konfigurieren

Für die nächsten Schritte müsst ihr das Program „git“ installiert haben. Erstellt ein neues Verzeichnis, in dem ihr eure Apps verwalten möchtet. Zum Beispiel:

mkdir ~/Coding/Android/

Dann klont ihr euer geforktes Repository dorthin.

cd ~/Coding/Android
git clone git@gitlab.com:USERNAME/fdroiddata.git

Wenn der Prozess abgeschlossen ist, wechselt ihr in das Verzeichnis hinein und erstellt einen weiteren Remote-Eintrag, welcher auf das originelle Repository zeigt.

cd ~/fdroiddata
git remote add upstream https://gitlab.com/fdroid/fdroiddata.git

Möchte man später Updates vom originellen (Upstream) Repository in euer eigenes übernehmen, also sein Repository auf den neusten Stand bringen, so genügt der folgende Befehl:

git pull --rebase upstream master

Damit ist die grundlegende Konfiguration des Repositories fertig.

4. App-Daten eintragen

Für jede im F-Droid Store erhältliche App gibt es eine Datei package.id.txt im Ordner „metadata„.

Der erste Schritt ist demnach eine Datei mit dem Namen „package.id“ im Ordner „metadata“ anzulegen. Dabei steht „package.id“ für den Namen des Packages, in dem die App lebt. Ein Beispiel wäre: „com.google.android.diskusage.txt

Nun gilt es die Datei mit Leben zu füllen. Glücklicherweise gibt es dafür eine Templatedatei „template“, welche man für eine grundlegende Einführung übernehmen kann.

Die Beschreibung meiner App sieht ungefähr so aus:

Categories:Office,Internet
License:MIT
Web Site:http://DOMAIN.TLD
Source Code:https://github.com/USER/PROJECT
Issue Tracker:https://github.com/USER/PROJECT/issues
Bitcoin: BTCADRESSE

Auto Name:APPNAME
Summary:ZUSAMMENFASSUNG
Description:
BESCHREIBUNG
.

Repo Type:git
Repo:https://github.com/USER/PROJECT.git

Build:1.0,1
 commit=v1.0
 target=android-21

Auto Update Mode:Version v%v
Update Check Mode:Tags .*[0-9]$
Current Version:1.0
Current Version Code:1

Wichtig ist, dass die Werte der Optionen direkt hinter dem Doppelpunkt, ohne Leerzeichen dazwischen, stehen.

Die initiale Build-Version muss angegeben werden. Dabei kann auf Tags zurückgegriffen werden, was die automatischen Updates auch vereinfacht.

Der Update-Mechanismus ist in diesem Beispiel so gestaltet, dass der Updater von F-Droid alle Tags, welche „vx.y“ matchen, auscheckt und in den Commits die AndroidManifest.xml ausliest. Die neuste Version ist dann die, mit dem höhsten „versionCode“. Ihr dürft also nicht vergessen bei jedem Update die „versionName“ „versionCode“ Parameter in der AndroidManifest.xml anzupassen.

Für mehr Informationen kann man sich im Handbuch unter http://f-droid.org/manual umschauen.

5. Build lokal testen

Bevor wir unsere App in den F-Droid-Store zum Review geben, sollten wir schauen, ob sich diese mit den Fdroid-Tools lokal bauen lässt.

Dazu müsst ihr euch die Fdroidserver-Tools installieren. Die Schritte in der Readme-Datei:

git clone https://gitlab.com/fdroid/fdroidserver.git 
cd fdroidserver 
virtualenv env/ 
. env/bin/activate 
pip install -e . 
python2 setup.py install

Alternativ gibt es im AUR das Paket „fdroidserver-git„.

Um den Build-Prozess auszuführen benötigen wir ein lokales F-Droid Repository. Dazu erstellt man sich einen weiteren Ordner:

mkdir ~/Coding/Android/fdroid-build

Nachdem man in den Ordner gewechselt ist, führt man „fdroid init“ aus.

cd ~/Coding/Android/fdroid-build
fdroid init

Dabei kann es passieren, dass folgende Meldung auftritt:

No Android SDK found!
You can use ANDROID_HOME to set the path to your SDK, i.e.:
 export ANDROID_HOME=/opt/android-sdk
Enter the path to the Android SDK (/opt/android-sdk) here:

Ich hab fdroid beendet und danach die Umgebungsvariable entsprechend gesetzt (Fish-Syntax):

set -x ANDROID_HOME "/home/gehaxelt/Coding/Android/Sdk"

Führt man den Initialisierungsprozess erneut aus, so sollte folgende Erfolgsmeldung ausgegeben werden:

Built repo based in "/tmp/foo"
with this config:
 Android SDK: /home/gehaxelt/Coding/Android/Sdk
 Android SDK Build Tools: /home/gehaxelt/Coding/Android/Sdk/build-tools/21.1.2
 Android NDK r10d (optional): $ANDROID_NDK
 Keystore for signing key: /home/gehaxelt/.local/share/fdroidserver/keystore.jks

Es fehlen jetzt immer noch einige wichtige Ordner, welche wir mit einem Aufruf erstellen lassen können:

fdroid build --all
Creating log directory
Creating temporary directory
Creating output directory
Creating build directory
No apps to process.

Im nächsten Schritt bietet es sich an einen Symlink unserer „package.id.txt“ aus dem „fdroiddata/metadata/“ in den „fdroid-build/metadata/“ zu erstellen:

ln -s ~/Coding/Android/fdroiddata/metadata/package.id.txt ~/Coding/Android/fdroid-build/metadata/package.id.txt

Nun können wir den Build-Prozess starten:

cd ~/Coding/Android/fdroid-build/
fdroid build -v -t -l --no-tarball package.id

Läuft der Build-Prozess erfolgreich durch,so sollte man noch den Update-Prozess überprüfen:

fdroid checkupdates package.id

Wenn alles erfolgreich verläuft, kann man sich freuen und einen Merge Request stellen. Andernfalls sollte man solange die „package.id.txt“ anpassen, bis es passt.

6. App veröffentlichen

Kommen wir nun zum letzten Schritt. Zunächst müssen wir unsere Änderungen in einem Commit festhalten:

git add metadata/package.id.txt
git commit -m 'Adding package.id'
git push

Danach loggt man sich wieder auf der GitLab.com Webseite ein und müsste unter seinen Aktivitäten den Commit wiederfinden.

Normalerweise steht direkt daneben eine Aufforderung zum Eröffnen eines Merge Requests. Ist das nicht der Fall, so muss man den Buttons auf der rechten Seite selbst betätigen und die Branches korrekt setzen.

In den Merge Request sollte man noch einen kleinen Grund angeben, weshalb die App in den Store aufgenommen werden sollte. Es bietet sich ausßerdem an die Lizenz + ggf. benutzte Bibliotheken/Abhängigkeiten angeben.

Zuletzt muss man noch ein wenig Geduld mitbringen, bis eine Person des F-Droid-Teams sich den Merge Reqeuest anschaut und die App „durchwinkt“ bzw. konstruktives Feedback abgibt.

~ Sebastian