Anstatt (oder zusätzlich zu) binäre APKs aus externen Quellen in ein Repository aufzunehmen, kannst du diese direkt aus dem Quellcode erstellen.
Bei Verwendung dieser Methode, ist es möglich zu überprüfen, ob die Anwendung korrekt erstellt wird, mit dem Quellcode übereinstimmt und nur Freie Software enthält. Bedauerlicherweise scheint es in der Android-Welt üblich zu sein, dass Anwendungen, die als binäre APKs angeboten werden, sich als Freie Software präsentieren, obwohl tatsächlich einige oder gar alle der folgenden Umstände zutreffen:
- Der Quellcode (entweder einer bestimmten Version oder sogar aller Versionen!) steht nicht zur Verfügung oder ist unvollständig.
- Der Quellcode ist nicht dazu geeignet, die angebotene, eigentliche Binärdatei zu erzeugen.
- Der ‘Quellcode’ enthält Binärdateien unbekannter Herkunft oder mit proprietären Lizenzen.
Aus diesen Gründen werden für das F-Droid-Hauptrepository aus dem Quellcode erstellte Anwendungen bevorzugt, wenngleich gelegentlich, aus technischen oder historischen Gründen, Ausnahmen von diesem Grundsatz gemacht werden.
Beim Erstellen von Anwendungen aus dem Quellcode sollte beachtet werden, dass du sie mit deinem eigenen Schlüssel signieren wirst (alle APK-Dateien müssen zur Installation in Android signiert sein). Ist eine Anwendung auf einem Gerät bereits installiert, dann wird keine Aktualisierung möglich sein, wenn die neue Version mit einem davon abweichenden Schlüssel signiert ist, bevor nicht das Original deinstalliert wurde. Dies kann bei den Nutzern zu Unannehmlichkeiten führen, da mit dem Deinstallationsvorgang alle mit der ursprünglichen Installation verknüpften Daten verloren gehen.
Die Abläufe zur Verwaltung eines Repositorys für quellcodeerstellte Anwendungen ähneln denen, die im Kapitel „Einfaches Binärdateien-Repository“ beschrieben sind. Du musst nun allerdings:
- Eintragungen zur Herstellung in die Metadatendateien einschließen.
fdroid buildausführen, um alle Anwendungen herzustellen, die noch nicht erstellt sind.fdroid publishausführen, um die Konfektionierung abzuschließen und alle hergestellten APKs zu signieren.
App-Daten-Verzeichnis oder fdroiddata
Um alles zu erledigen, wird mindestens ein Repository-Datenverzeichnis
benötigt. Innerhalb dieses Verzeichnisses führst du den fdroid-Befehl aus,
um alle Repository-Verwaltungsaufgaben auszuführen. Du musst entweder ein
ganz neues erstellen oder eine Kopie der Daten heranziehen, die im
F-Droid-Hauptrepository verwendet werden:
git clone https://gitlab.com/fdroid/fdroiddata.git
Unabhängig von der beabsichtigten Verwendung der Werkzeuge, wirst du immer
einige grundlegende Konfigurationsdetails festlegen müssen. Dies geschieht
durch Erstellung einer Datei namens config.yml im Datenverzeichnis. Es
empfiehlt sich die Beispieldatei (./examples/config.yml) aus dem
fdroidserver-Projekt in dein Datenverzeichnis zu kopieren und sie dann
entsprechend der darin enthaltenen Anweisungen zu bearbeiten.
Ist die Konfiguration auf diese Weise einmal erfolgt, werden alle
Werkzeugfunktionen durch Ausführung des fdroid-Befehls zugänglich. Wird
der Befehl für sich allein ausgeführt, erhältst du eine Liste der zur
Verfügung stehenden Unterbefehle.
Jeder Befehl kann mit --help ergänzt werden, um eine Liste zusätzlich
verfügbarer Optionen für diesen Befehl zu erhalten.
fdroid update --help
Mehr zu fdroid build
Bei Ausführung ohne weitere Parameter wird fdroid build sämtliche
Versionen von Anwendungen herstellen, die noch nicht im repo-Verzeichnis
(oder genauer, im unsigned-Verzeichnis) enthalten sind. Es gibt noch
verschiedene andere Möglichkeiten. Wie bei allen Tools ist die Option
--help dein Freund, aber im Folgenden findest du einige kommentierte
Beispiele und Erläuterungen zu den gängigsten Verwendungsmodi:
Um eine Einzelversion einer einzigen Anwendung herzustellen, könntest du Folgendes ausführen:
fdroid build org.fdroid.fdroid:16
Dies ist ein Versuch, den Versionscode 16 (entspricht Version 0.25) des F-Droid-Clients zu erstellen. Viele der Tools erkennen Argumente als Pakete, sodass ihre Aktivität auf eine begrenzte Anzahl von Paketen beschränkt werden kann.
Wenn die o. g. Herstellung erfolgreich war, werden zwei Dateien im
unsigned-Verzeichnis eingestellt sein:
org.fdroid.fdroid_16.apk
org.fdroid.fdroid_16_src.tar.gz
Das erste ist die (nicht signierte) APK. Du kannst diese mit einem Debug-Schlüssel signieren und zum Testen direkt auf dein Gerät oder einen Emulator übertragen. Das zweite ist ein Quell-Tarball, der genau den Quellcode enthält, der zum Erstellen der Binärdatei verwendet wurde.
Beabsichtigst du diese Dateien zu veröffentlichen, könntest du nun Folgendes ausführen:
fdroid publish
Der Quell-Tarball würde ins repo-Verzeichnis verlagert (das Verzeichnis,
das du auf deinem Webserver kopieren würdest). Eine signierte und
zip-komprimierte Version des APK würde ebenfalls dort erscheinen und beide
Dateien würden aus dem unsigned-Verzeichnis entfernt werden.
Erfolgt die Herstellung rein zu Testzwecken und sollen die Ergebnisse nicht,
oder zumindest noch nicht, in ein Repository verschoben werden, kann die
--test-Option verwendet werden, um die Ausgabe ins tmp-Verzeichnis statt
ins unsigned umzuleiten. Der gleiche Effekt könnte erzielt werden, indem
die Ausgabedateien aus unsigned nach der Herstellung einfach gelöscht
werden, allerdings mit dem Risiko, dass dies vergessen wird!
In ähnlicher Weise (und nur in Verbindung mit --test), kann --force
verwendet werden, um die Herstellung einer Gesperrten Anwendung zu
erzwingen, für die es normalerweise völlig ignoriert werden würde. Ebenso
kann die Herstellung einer Version, in der ELFs oder bekannte
nicht-quelloffene Bibliotheken gefunden wurden, erzwungen werden. Siehe auch
— scanignore und scandelete im Abschnitt Builds.
Wenn die Erstellung fehlschlug, kannst du einen Blick auf die Ausgabe im logs/-Verzeichnis werfen, um herauszufinden warum. Ist das nicht erhellend, versuche die App auf herkömmlichem Weg, Schritt für Schritt, herzustellen: Android Update Project, NDK-Build, Ant Debug.
Berücksichtige, dass Quellcode-Repositorys oft vorgefertigte Programmbibliotheken enthalten. Wenn die App für das F-Droid-Hauptrepository bestimmt ist, ist es wichtig, dass alle diese Bibliotheken entweder über die Metadaten oder durch einen seriösen Drittanbieter hergestellt sind.
Ausführung von fdroid build in deiner App-Quelle
Eine weitere Möglichkeit, fdroid build einzusetzen, besteht, wenn lieber
eine Metadatendatei genutzt werden soll, die in der App-Quelle selbst
enthalten ist, als eine in einem metadata/-Ordner mit vielen anderen
Apps. Die Metadatendatei .fdroid.yml sollte sich im Wurzelverzeichnis des
Quellrepos befinden.
Sind diese Vorgaben erfüllt, kann die Herstellung der aktuellsten Version der App unter Nutzung des gesamten F-Droid-Funktionsumfanges folgendermaßen erfolgen:
fdroid build
Möchtest du jede Einzelversion herstellen, ergänze --all.
Direktinstallation
Erstellung und Installation können auch direkt auf einem verbundenen Gerät
oder Emulator erfolgen, indem der Befehl fdroid install angewendet
wird. Geschieht das ohne Übergabe von Paketen als Argumente, dann wird jede
verfügbare, zuletzt erstellte und signierte Version jedes Pakets installiert
werden. In den meisten Fällen wird dies nicht erwünscht sein, daher bricht
die Ausführung sofort ab. Sollte es tatsächlich gewünscht sein, kann dieses
Verhalten allerdings durch Verwendung von --all wieder aufgehoben
werden. Zu beachten ist, dass dabei momentan keine Plausibilitätsprüfungen
erfolgen, sodass keine Benachrichtigungen stattfinden, wenn die Dateien im
signierten Ausgabeverzeichnis verändert wurden.
