Auch wenn Android zum Teil OpenSouce ist, so ist es doch immer irgendwo mit Google verbunden. Viele Apps kann man gar nicht anders als über den PlayStore beziehen, es gibt sie nicht einmal auf der Website des Entwicklers. Außerdem gibt es mittlerweile viele Google Dienste auf welche andere Apps zurückgreifen, und so kommt es das man trotz einer Custom Rom wieder dazu „gezwungen“ ist den Playstore und damit auch jede menge andere Dienste zu installieren.
Die alternative heißt sich damit abzufinden, wieso sollte jemand eine andere Möglichkeit bereitstellen um Apps zu installieren? Alternative Stores haben meist ein begrenztes Angebot oder sind nicht gerade seriös. Das neu kaufen aller Apps die man schon bei Google hat ist das geringere Problem (natürlich ist es ärgerlich aber wegen den 5€). Nun gibt es noch F-Droid, aber hier haben wir das gleiche – all diese „Stores“ haben nur Anwendungen die man sowieso anderweitig bekommt. Von Fragwürdigen Websites von denen man Apps herunterladen kann wollen wir mal absehen, das ist von Grund auf unseriös.
Also, wie bekomm ich nun eine App welche es nur im PlayStore gibt auf mein Telefon welches kein Google hat?
Nun habe ich mal wieder eine neues Telefon und diesmal ist es kein Androide geworden sondern ein Jolla, mit Sailfish OS. Diese kleine Finnische Firma hat ein kleines Linux auf ihren Telefonen und auch eine eigne kleine GUI dazu. Leider ist die Softwareunterstützung noch relativ mager da niemand bereits Apps für ein neues OS geschrieben hat (natürlich gibt es jede menge cli Software aber wer will das schon). Aus diesem Grunde kommt Sailfish OS mit Unterstützung für Android Apps. Diese kann man wie unter Android einfach installieren und ausführen, mit der einzigen Auffälligkeit das diese einen „Android-zurück-knopf“ auf dem Bildschirm haben, da die Android Apps nicht ganz dem Bedienkonzept von Sailfish OS folgen (ja, es gibt kein Zurück, kein Home, oder irgendwelche anderen knöpfe – dafür gibt es Gesten!). Und nun wieder das leidliche Problem: es gibt ein paar schöne Android Apps die man weiterhin nutzen will, aber die gibt es nur im PlayStore und sind teilweise auch dort gekauft. Und da ich auf diesem Gerät in gar keinem Fall Google installieren wollte bin ich ein wenig kreativ geworden. Und hier beginnt unsere kleine Geschichte.
Nun gibt es eine schöne App für FOSS – FDroid, welche neben den gebräuchlichen Funktionen des App suchens, installieren und updaten auch die Möglichkeit hat eigene bzw. andere Repos einzubinden und zu benutzen (ja, sie kann aus dem Telefon selber eine Repo machen). Also müssen wir nur eine eigene Repo erstellen, alles was man dazu braucht ist ein kleiner Webserver und ein Programm was den Index für diese Repo erstellt – welches es natürlich kostenfrei zum Download gibt. Nun muss man nur noch die Apps aus dem PlayStore oder anderen Quellen in diese Repo bekommen – hier kommt Raccoon ins Spiel, ein in Java geschriebener Playstore-Client welcher das suchen und herunterladen von Apps aus dem Playstore unterstütz (auch gekaufte).
Ich will nicht sagen das es eine volkommen perfekte und optimale Lösung ist, es ist viel eher jede menge gefrickel aber im Moment für mich ausreichend ist. – Und sie ist eine nette kleine Spielerei.
Vorher noch eine kleine Alternative und wie ich zu dieser Idee gekommen bin. Die F-Droid app bietet die Möglichkeit auf dem Handy eine lokale Repo zu erstellen welche alle auf dem Handy installierten Apps beinhaltet – somit auch alle Apps von Google. Die erste Idee war ein Android Handy in die Ecke zu legen und einfach nur Repo sein zu lassen, danach wollte ich eine kleine VM mit Android und dann bin ich auf Raccoon gestoßen. Ich habe auch diverse andere Programme und Scripts ausprobiert, aber die meisten werden seit Jahren nicht weiterentwickelt, sind sehr schlecht zu bedienen, funktionieren nur unter Windows, funktionieren nur schlecht oder eben garnicht.
Und nun meine kleine Anleitung (Dieser Anleitung ist volkommen optional und ist nicht für nicht-Linux-Nutzer geeignet, es wird davon ausgegangen das grundlegende Konzepte bekannt sind und der Webserver nur im lokalen Netzwerk erreichbar ist)
Als Server für die Repo dient mein NAS mit Debian Jessie, welches sowieso den ganzen Tag in Betrieb ist und praktischerweise schon einen Apache Websever hat. Ansonsten kann dieser schnell installiert werden, die Grundkonfiguration ist für das lokale Netzwerk ausreichend, aber hierzu gibt es mehr als genug Anleitungen.
Zuerst benötigen wir eine aktuelle Version von Raccoon welche wir auf der Website des Entwicklers herunterladen können. An einem belibigen Ort (wo Raccoon bleiben soll) können wir es nun starten, bei mir liegt es gleich mit auf dem NAS, wo ich Raccoon dank XForward auch über SSH normal starten kann (natürlich kann es auf jedem Computer im Netzwerk sein, man muss nur die apks irgendwie zu FDroid kopieren können). Außerdem sollte auf dem Rechner Java installiert sein.
sudo mkdir /opt/raccoon
wget http://www.onyxbits.de/sites/default/files/download/25/raccoon-3.7.jar
sudo cp raccoon-3.7.jar /opt/raccoon/raccoon.jar
Zur Einrichtung und Benutzung von Raccoon sollte man der Anleitung auf der genannten Website folgen – man benötigt eine Android DeviceID sowie ein Account bei Google mit E-Mail und Passwort. Will man einen bestehenden Account nutzen sollte man auch die DeviceID von seinem Telefon auslesen, sonst hat man auf seinem Account ein neues Telefon welches nie mehr weggeht.
Gestartet wird es wie gewohnt mit
java -jar /opt/raccoon/raccoon.jar
alternativ können auch Parameter angehängt werden, dadurch startet keine grafische Oberfläche und man kann es z.Bsp. von der Kommandozeile aus updaten lassen.
Nun müssen wir noch FDroid installieren, praktischerweise gibt es bei Debian Jessie das Paket fdroidserver in der repo so dass ein
sudo apt-get install fdroidserver
ausreichend ist, die benötigten Abhängigkeiten werden hier automatisch installiert. Natürlich kann es auch manuell heruntergeladen und installiert werden.
Zu beachten ist das FDroid auf das Android SDK angewiesen ist, welches installiert sein muss. Diese wird benötigt damit FDroid die Apps aus dem Quellcode bauen kann (das wollen wir hier nicht) und um die repo mit Informationen aus den APKs zu füttern (das wollen wir). Der Download dazu ist auf https://developer.android.com zu finden – „SDK Tools Only“ ist ausreichend, es könnte also so aussehen:
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
cd /opt/android-sdk
tar -xvf android-sdk_r24.4.1-linux.tgz
sudo cp -R android-sdk-linux /opt/android-sdk
sudo chmod +x ./tools/android
sudo ./tools/android update sdk –no-ui
Das einrichten von FDroid ist ebenfalls ausführlich erklärt und hier und hier zu finden.
Es wirkt zwar ein wenig seltsam, beschränkt sich aber für den Hausgebrauch auf eine Handvoll Befehle. Auf einem aus dem Internet erreichbaren Server sollte man sich ein wenig mehr Mühe geben, aber das ist nicht Ziel dieser Anleitung und somit optional. Wir legen also ein Verzeichnis im Webroot an, wechseln dahin und initialisieren den FDroid server
mkdir /var/www/fdroid
cd /var/www/fdroid
fdroid init
Nun können wir unsere Apps aus /home/hangman/Raccoon/archives/default/apk-storage/ nach /var/www/fdroid/repo/ kopieren und mit einem „fdroid update -c“ den index aktualisieren lassen. Das ganze passt auch in ein kleines bashscript und kann per cronjob ausgeführt werden. Bei dieser Gelegenheit kann Raccoon zum automatischen Update angeschoben werden. Das ganze sieht dann möglicherweise folgendermaßen aus.
#!/bin/bash
echo -n "FDroid Repo Update at " && date +%F\ %T
echo "Update Raccon ..."
java -jar /opt/raccoon/raccoon.jar -a /home/hangman/Raccoon/archives/default/ -u
echo "and copy all new apps to FDroid Repo ..."
find /home/hangman/Raccoon/archives/default/apk_storage/ -name "*.apk" -mtime -1 -exec cp -v {} /var/www/fdroid/repo/ \;
echo "now get an actual copy of Fdroid and save the old one"
mv /var/www/fdroid/repo/FDroid.apk /var/www/fdroid/archive/FDroid-`stat -c %Z /var/www/fdroid/repo/FDroid.apk`.apk
wget -P /var/www/fdroid/repo/ https://f-droid.org/FDroid.apk
echo "and finally update FDroid Repo index ..."
cd /var/www/fdroid/ && fdroid update -c
echo -n "Finish FDroid Repo Update at " && date +%F\ %T
Das ganze speichern wir in einer belibigen Datei und machen es ausführbar (wenn man nicht gerade Hangman heißt sollte man die Pfade anpassen, aber das versteht sich von selbst?)
vi update-fdroid.sh
chmod +x update-fdroid.sh
Nun können wir einmal ausprobieren ob alles zufriedenstellend funktioniert und ob irgendwelche fehler auftreten, wenn alles gut ist wird es als cronjob eingetragen.
Bei mir wird es jeden Sonntag um 00:50 ausgeführt, außerdem wird die komplette Ausgabe in einer Logdatei angehangen. der Eintrag in crontab -e könnte so aussehen:
50 0 * * 0 /home/hangman/update-fdroid.sh >> /home/hangman/update-fdroid.log 2>&1 &
Zu guter Letzt müssen wir noch FDroid auf unserem Handy installieren, die Android Applikation gibt es auf https://f-droid.org zum Download, oder mit unserem Script auch unter http://adresse.zu.unserem.computer/fdroid/repo/FDroid.apk. Ist die App installiert kann man unter „Paketquellen verwalten“ eine neue hinzufügen, als Adresse einfach „http://adresse.zu.unserem.computer/fdroid/repo/“ angeben und fertig. Wer https nutzen will sollte bedenken das FDroid noch ein Problem mit selbstsignierten Zertifikaten zu haben scheint, hier sollte man einfach das s weglassen (nicht schön aber im lokalen Netzwerk vermutlich egal).
Nun können wir raccoon starten und damit Android apps suchen und downloaden. Wenn wir fertig sind können wir ./update-fdroid.sh ausführen und 2 miunten später sind die neuen apps in der Repo vorhanden und werden wöchentlich mit updates versorgt.
Um neue apps zu installieren ist es umständlich, um die apps aktuell zu halten ist es einfach. Es ist jede menge Text geworden und auch ziemlich unverständlich, aber ich war der Meinung es aufschreiben zu müssen, viel Spaß damit.
PS: Da ich das ganze schon 2 Jahre in Betrieb habe sollte man erwähnen das das Script überhaupt nichts aufräumt, bei mir sind es inzwischen 27Gib an Daten, die eigentliche Repo (/var/www/fdroid/repo ) hat 4,1Gib.
EDIT:
Natürlich schreibt man so etwas nach 2 Jahren Benutzung auf, und dann einen Monat später merkt man das es ein „großes Update“ gab, und der Entwickler von Raccoon sich dazu entschieden hat das CLI wegfallen zu lassen, womit mein schönes script natürlich nicht mehr funktioniert. Die alte Version weiterhin nutzen funktioniert auch nicht, weil Google regelmäßig sein Protokoll umbaut. Ich werde mich also damit abfinden müssen keine Playstore Apps mehr zu benutzen.