https://f-droid.org/manual/fdroid.html : Voici le lien vers la doc officielle. Tout est dit…

… nan c’est pas vrai.

Donc, pour les comiques qui songeraient à mettre en place un dépôt (perso|local|de test) pour des APK, par exemple pour se passer des services Google, éviter de rechercher à chaque fois où se trouve ce %$~£¤ d’APK sur sa carte SD, partager des APK avec sa famille, ou tout simplement pour la beauté du geste, voici quelques notes qui forment un vague didacticiel rapide, qui devrait avoir comme effet secondaire de préserver l’intégrité mentale des gens dit “normaux” (ceux qui cachent maladroitement un sourire en coin quand ils entendent dire : “Java c’est portable”). Je me limite à un simple dépôt binaire, fdroidserver pouvant également servir de système de build pour construire les paquets depuis les sources…

On commence par créer un dossier de travail (~/wip), parce qu’on va télécharger plus tard des ZIP dedans (et qu’on n’aime pas décompresser les ZIP dans son $HOME pour ensuite s’apercevoir que l’archive ne contenait pas de dossier de premier niveau…). Puis on y clone les sources du serveur (c’est du Python, bon choix !) :

git clone git://gitorious.org/f-droid/fdroidserver.git

Bien penser à installer si nécessaire les modules python requis :

apt-get install python-magic python-imaging

On doit maintenant récupérer le SDK Android, on sélectionne l’archive adt- bundle pour son architecture sur la page https://developer.android.com/sdk/index.html et nos yeux incrédules et globuleux notent qu’elle fait 500 Mo. Solution : aller regarder des vidéos de chat en attendant que le téléchargement finisse. On décompresse le ZIP, et on obtient par exemple le dossier ~/wip/adt-bundle-linux-x86_64-20131030 (j’ai pris la version 64-bit).

Note à bénêt avec la version x86_64 : lancer la commande file sur des binaires au hasard (aapt…) et s’apercevoir qu’ils sont compilés en 32-bit. Google perd en crédibilité là, mais grave, je culpabilise moins d’avoir ignoré les multiples mails de leurs recruteurs :

apt-get install libc6-i386 lib32z1 lib32stdc++6

On passe à la création du dépôt proprement dit :

cd ~/wip
# dossier de travail du dépôt
mkdir ~/wip/toto
# dossier "final" du dépôt
mkdir ~/wip/toto/repo
cp -a fdroidserver/config.sample.py toto/config.py

toto sera le dossier de travail du dépôt, et toto/repo le dossier contenant l’index du dépôt, mais aussi les APK (donc copiez les dedans maintenant ! :).

config.py contiendra la configuration du dépôt, il est convenablement commenté par défaut, mais voici pour référence une version minimale (à adapter) :

sdk_path = "/home/monuser/wip/adt-bundle-linux-x86_64-20131030/sdk"
build_tools = "android-4.4"
icon_max_size = 72
repo_maxage = 365
repo_url = "https://example.org/repo"
repo_name = "Test repository"
# les mollusques vaincront
repo_icon = "poulpe.png"
repo_description = """
Test repository.
"""
archive_older = 0
repo_keyalias = None
build_server_always = False

Tout devrait être prêt à ce stade, donc on lance la génération de l’index :

cd ~/wip/toto
# NB : dossier à mettre dans le $PATH pour éviter de retaper le chemin complet
../fdroidserver/./fdroid update

Et évidemment chez moi ça n’a pas fonctionné. J’ai dû générer la classe getsig en java, un message d’erreur me le demandant :

cd ~/wip/fdroidserver/fdroidserver/getsig
./make.sh
# grmbl il me faut javac
sudo apt-get install openjdk-6-jdk
# regarder avec résignation dbus, des -dev et du java s'installer :3
./make.sh

On relance fdroid update, et cette fois-ci ça devrait fonctionner. S’il se plaint de metadata manquantes, lancer fdroid update -c puis à nouveau fdroid update. Touche finale, copier le dossier ~/wip/toto/repo sur le serveur web pour qu’il soit servi correctement.

Pour finir, ouvrir le client FDroid, bouton menu > Gestion de dépôts, et ajouter notre dépôt de test (https://example.org/repo comme spécifié dans le config.py), et pouf pouf, ça fait des APK. :)

En vrac pour aller plus loin :

  • Ajouter de vraies metadata : après voir lancé fdroid update -c, remplir ~/wip/toto/metadata/*.txt.
  • Signer le dépôt : générer une clé, grep key ~/wip/fdroidserver/config.sample.py et remplir les variables
  • Redistribution : attention, il n’est probablement pas autorisé de redistribuer certains APK en dehors du Play Store, donc à réserver pour un usage privé dans le cadre du cercle familial…

C’est tout pour aujourd’hui, vous pouvez aller en récréation dans la cour.