---
title: Se débarrasser de Google sur Android
date: 2016-04-07
author: raspbeguy
template: post
tags: android,Auto-hébergement,cyanogenmod,dépôt miroir,f-droid,google,nexus,planet libre,rom,root,Tutoriels
---

La vie privée sur Internet, c'est important, je crois que vous commencez à vous faire une bonne idée de notre opinion à ce sujet. Quand on vous en parlait sur Hashtagueule, certains auraient été tentés d'y voir uniquement une allusion aux ordinateurs. C'est vrai qu'on ne vous a parlé pour ainsi dire concrètement que de cette plateforme. Ce serait bien entendu avoir une gigantesque poutre dans l'œil que de croire qu'il ne faut se protéger que sur son PC. En effet, la quantité de données personnelles stockées dans les appareils mobiles est foutrement plus importante que sur nos ordinateurs. Imaginez, vous disposez d'un appareil qui ne vous lâche pas d'une semelle, qui sait exactement où vous vous trouvez, qui établit des liens vers d'autres personnes logées à la même enseigne, qui connait vos petits secrets, vos amis, votre famille, vos amours officiels ou secrets, qui est à la limite capable de détecter votre état de santé et vos paramètres biométriques. Couplez à cela le fait que les logiciels libres sont nettement moins répandus sur smartphone que sur ordinateur, ajoutez-y la législation corrompue et la centralisation des services, pour ne pas dire les portes dérobées qui font bonne figure, et vous vous rendez compte que **vous avez un véritable œil de Moscou dans votre poche**.

On va donc aujourd'hui parler mobile, plus particulièrement du domaine Android, cet OS grand public accordant le plus, à mon sens et celui de beaucoup d'autres, de pouvoir à l'utilisateur. Les esclaves propriétaires de téléphones Apple, désolé, nous compatissons, mais nous ne pouvons pas pour le moment vous fournir d'astuces significatives dans le domaine.

Android est développé par AOSP, un projet dans lequel Google est amplement majoritaire en implication. C'est un fait. Cependant, une partie de cet OS est en licence libre, ce qui permet à des OS basés sur Android (dites ROMs alternatives) de voir le jour. La version Google, quant à elle, est servie avec un ensemble de programmes destinés à se connecter aux services Google, afin de vous prodiguer un accès facile à votre compte Google et les services associés, pour masquer son vrai but, qui est de ramasser de la donnée sur vous. Pour des personnes aimant leurs services auto-hébergés ou qui ne souhaitent pas utiliser ces services, il est possible d'utiliser une ROM alternative pour supprimer les services Google.

Cependant, si on élimine les services Google, on se prive également de la boutique Google Play, ce qui peut en pénaliser plus d'un. Vous avez toujours la possibilité d'utiliser les dépôts standards F-Droid, mais cela reste un peu pauvre. Une autre solution serait d'installer le [store d'Amazon](http://www.amazon.com/getappstore), mais outre le fait que vous vous jetez vous même de Charybde en Scylla, ce n'est pas très conseillé car il y a plus d'applications piégées sur ce store, et moins de "bonnes" applications. Enfin, la solution la plus dangereuse serait de télécharger les apps à partir de sources non vérifiées comme il y en a des centaines sur Internet, ce qui est légalement douteux et catastrophique niveau sécurité, sans parler de l'absence de système de mise à jour. Point n'est besoin d'en dire plus, **nous allons voir comment installer des applications du Google Play sans les services Google Play**.

# Niveau 0 : Installer une ROM alternative

Ce n'est pas le but de ce tutoriel, peut être pour une prochaine fois. La description de cette étape sera donc très sommaire, en attendant vous pourrez trouvez de très nombreux tutoriels pour le faire, ici on se concentrera en priorité sur la valeur ajoutée Hashtagueule.

Il vous faut d'abord choisir une ROM. Il y en a des dizaines, plus ou moins spécialisées. L'une des ROMs alternatives est [CyanogenMod](http://www.cyanogenmod.org/). Pour le moment, ma ROM de prédilection reste [Dirty Unicorn](http://dirtyunicorns.com/), qui a un développement assez actif, qui intègre relativement rapidement des dernères nouveautés de la version Google d'Android, et qui a beaucoup de possibilités faciles d'accès de personnalisation d'interface. Pour information, cette ROM tourne impeccablement sur mon Nexus 5.

En partant d'un mobile sous Android Google, les étapes sont toujours les même :

1. rootage de l'appareil ;
2. installation d'un bootloader ;
3. copie de la ROM dans la mémoire de l'appareil ;
4. flash de la ROM.

Avant ces étapes, assurez vous de sauvegarder tout ce qu'il y a à sauvegarder, et notez votre identifiant Android, vous en aurez besoin plus tard. Pour ce faire, vous pouvez taper la combinaison `*#*#8255#*#*` sur le clavier du téléphone. Un texte va s'afficher, votre identifiant Android est à la ligne "Device ID", écrit sous la forme "android-votreidentifiant" (ce qui compte est après le tiret).

Vous pouvez également obtenir cet identifiant avec l'application [Device ID](https://play.google.com/store/apps/details?id=com.redphx.deviceid). À télécharger sur le Google Play Store. Amusant quand on sait qu'on a besoin de ce numéro principalement pour éviter d'utiliser ce store.

Une fois votre ROM flashée, installez l'application [F-Droid](https://f-droid.org/) sur votre mobile. Cela vous permettra d'obtenir des applications libres, mais également de vous faire votre propre dépôt d'applications.

# Niveau 1 : Télécharger les apps sur l'ordinateur

À ce niveau, l'important est de comprendre que vous téléchargerez les applications qui vous intéressent sur votre ordinateur **en le faisant passer pour un appareil Android auprès de Google**. Il y a plusieurs solutions pour y arriver. Personnellement, j'utilise l'extension Firefox [APK Downloader](https://addons.mozilla.org/fr/firefox/addon/apk-downloader/) dont le rôle est d'ajouter un bouton sur chaque page web du Google Play Store. Vous aurez besoin de configurer l'application en renseignant votre adresse de compte Google, votre mot de passe, et l'identifiant Android que vous avez noté plus tôt.

![Notez le bouton "Download APK" permettant de télécharger directement l'application sur votre PC.](%assets_url%/2016/04/2016-04-07-171238_742x230_scrot.png)

Notez le bouton "Download APK" permettant de télécharger directement l'application sur votre PC.

À partir de là, vous pouvez si vous le souhaitez installer directement l'application sur votre appareil à l'aide de la commande de débug d'Android :

```
adb install /chemin/vers/l/application/téléchargée.apk
```

Mais ce serait passer à côté de fonctionnalités intéressantes :

- En faisant ainsi, vous êtes obligé de brancher votre téléphone à chaque fois que vous voulez installer une application, ce qui implique d'avoir son câble et de ne pas avoir peur de ruiner le cycle de la batterie de votre appareil. Ou alors vous autorisez le débug par réseau, ce qui est vivement déconseillé car très peu sécurisé (il suffit de connaître l'IP de votre appareil pour que n'importe qui puisse installer n'importe quoi).
- Pas de système de mise à jour OTA : vous ne serez pas informé des mises à jour pouvant être cruciales, et vous devrez réinstaller manuellement chaque application en passant par l'ordinateur.

# Niveau 2 : Mettre en place votre dépôt

Il est alors intéressant d'avoir un serveur sur lequel vous allez constituer votre dépôt privé. Pour cela, vous allez avoir besoin des programmes suivants :

- le gestionnaire de dépôt F-Droid (paquet `fdroidserver` disponible dans les dépôts Debian) qui va permettre au client F-Droid de se synchroniser sur votre serveur ;
- [googleplayupdater](https://github.com/NeroBurner/googleplayupdater), un petit outil bien pratique qui permet de mettre à jour toutes les applications APK dans un dossier donné ;
- un serveur web, Nginx est tout indiqué pour ce genre de tâches, sachant que l'on va servir uniquement du contenu statique.

Sur votre serveur, créez le dossier du dépôt, chez moi il s'agit du dossier `/var/apk`. Placez-vous dans ce répertoire et effectuez la commande suivante :

```
fdroid init
```

Cette commande va créer un certain nombre d'éléments, dont le dossier `repo` et le fichier `config.py`.

Intéressons-nous au fichier de configuration. Normalement les commentaires sont assez explicites. Voici à quoi peut ressembler votre fichier de configuration :

```
#!/usr/bin/env python2

mvn3 = "mvn"

gradle = "gradle"

repo_maxage = 0

repo_url = "http://bidule.machin.truc"
repo_name = "Repo perso de Raspbeguy"
repo_icon = "fdroid-icon.png"
repo_description = """
Comme j'utilise Dirty Unicorn tout nu sans les services Google play,
ben je suis dans l'obligation de magouiller...
"""

archive_older = 3
archive_url = "https://f-droid.org/archive"
archive_name = "My First FDroid Archive Demo"
archive_icon = "fdroid-icon.png"
archive_description = """
The repository of older versions of applications from the main demo repository.
"""

keydname = "CN=bidule.machin.truc, OU=F-Droid"

keyaliases['com.example.another.plugin'] = '@com.example.another'

# Wiki details
wiki_protocol = "http"
wiki_server = "server"
wiki_path = "/wiki/"
wiki_user = "login"
wiki_password = "1234"

update_stats = False

stats_to_carbon = False
carbon_host = '0.0.0.0'
carbon_port = 2003

build_server_always = False

char_limits = {
    'Summary': 50,
    'Description': 1500
}
```

Les lignes 9 à 15 de cet exemple sont les plus importantes. En fait, normalement, vous n'aurez pas à modifier les autres lignes pour que le dépôt fonctionne bien.

Il vous faut ensuite copier vos APK directement dans le dossier `repo`. Ensuite, à partir du dossier du dépôt (dans notre cas `/var/apk`), effectuez la commande suivante, que vous devrez refaire après chaque ajout d'application au dépôt :

```
fdroid update --create-metadata
```

Il faut maintenant mettre en place le serveur web afin que le dépôt soit accessible depuis votre appareil par le réseau. Créez donc un _server block_ pour Nginx ressemblant à cela, dans le cas de l'utilisation de SSL/TLS, ce que je ne peux que vous recommander :

```
server{
  listen 80;
  listen [::]:80;
  server_name bidule.machin.truc;

  location ~ ^/.well-known/acme-challenge(/.*)?$ {
	  root /etc/letsencrypt/webrootauth;
	  default_type text/plain;
  }

  return 301 https://$server_name$request_uri;
}

server {
	listen 443;
	listen [::]:443;
	server_name bidule.machin.truc; 
	access_log /var/log/nginx/fdroid.access.log;
	error_log /var/log/nginx/fdroid.error.log;
	ssl on;
	ssl_certificate /etc/letsencrypt/live/machin.truc/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/machin.truc/privkey.pem;

	server_name_in_redirect off;

	root  /var/apk;

	location ~ ^/.well-known/acme-challenge(/.*)?$ {
		root /etc/letsencrypt/webrootauth;
		default_type text/plain;
	}

	location / {
		try_files $uri $uri/ =404;
	}
}
```

Les lignes 1 à 9 concernent la redirection de HTTP vers HTTPS. Vous reconnaîtrez certainement aux lignes 6 à 9 et 29 à 32 les instructions qu'on a introduites pour l'automatisation des renouvellements de certificats Let's Encrypt. Si ça ne vous dit rien, vous pouvez faire une cure de rappel [par ici](/posts/securiser-ses-sites-web-avec-lets-encrypt/), c'est gratuit et ça vous met plein de belles choses dans la tête.

Rechargez Nginx, puis il faut maintenant tester sur votre appareil. Dans F-Droid, dans le menu en haut à droite, rendez vous dans la Gestion des dépôts, puis tapez le "+" pour ajouter un dépôt (duh...). Entrez https://bidule.machin.truc/repo en adresse de dépôt et rien pour l'empreinte (vous êtes le seul utilisateur de votre propre dépôt, vous savez déjà la provenance de ce qu'il y a dessus, de plus comme vous êtes déjà en connexion sécurisée, il n'y a plus beaucoup de risques).

Laissez mouliner quelques secondes, et paf, normalement vous avez un dépôt fonctionnel.

![Screenshot_20160408-005739](%assets_url%/2016/04/Screenshot_20160408-005739-576x1024.png)

Le dépôt a bien été ajouté.

![Exemple d'app ajoutée dans mon dépôt.](%assets_url%/2016/04/Screenshot_20160408-005819-576x1024.png)

Exemple d'app ajoutée dans mon dépôt.

Une fois cette victoire confirmée, rappelez-vous le but initial de la manœuvre : avoir des applications qui se mettent à jour toutes seules comme des grandes.

# Niveau 3 : Automatiser la mise à jour des apps

C'est ici que googleplayupdater entre en scène.

Pour disposer de cet outil, clonez le dépôt quelque part sur votre serveur (on se fiche de l’endroit, le programme sera installé ailleurs).

Installez le programme par la commande :

```
python setup.py install
```

Notez que vous aurez peut-être à installer au préalable l'outil de déploiement `python-setuptools` :

```
apt install python-setuptools  # si vous utilisez python2
apt install python3-setuptools # si vous utilisez python3
```

Attention, si vous utilisez Python 3 (c'est toujours recommandé de l'utiliser si possible et pas trop enquiquinant), vous devez installer manuellement une dépendance par la commande :

```
pip install https://pypi.python.org/packages/source/p/protobuf/protobuf-3.0.0a3.tar.gz#md5=6674fa7452ebf066b767075db96a7ee0
```

Ensuite, copiez et renommez le fichier `config_example.py` dans un endroit adéquat (par exemple `/etc/googleplayupdater/config.py`) et modifiez-le afin qu'il ressemble à ceci :

```
from __future__ import unicode_literals

LANG            = "en_US" # can be en_US, fr_FR, ...
ANDROID_ID      = "votre_identifiant_android"
GOOGLE_LOGIN    = 'adresse@machin.truc'
GOOGLE_PASSWORD = 'mdp_compte_google'
AUTH_TOKEN      = None

# force the user to edit this file
if ANDROID_ID == None or all([each == None for each in [GOOGLE_LOGIN, GOOGLE_PASSWORD]]):
    raise Exception("config.py not updated")
```

Bien sûr, adaptez les variables `ANDROID_ID`, `GOOGLE_LOGIN` et `GOOGLE_PASSWORD` avec ce que vous avez mis dans la configuration de votre extension Firefox...

Vous pouvez tester la configuration avec la commande suivante :

/usr/local/bin/googleplayupdater -c /etc/googleplayupdater/config.py -v /var/apk/repo

Si vous constatez que tout se passe bien, vous pouvez alors finaliser en créant un script cron `update_apk` que vous placerez dans `/etc/cron.daily/` contenant ce code :

```
#!/bin/bash

GPUPD=/usr/local/bin/googleplayupdater
CONFIG=/etc/googleplayupdater/config.py
REPO=/var/apk
LOG_GPU=/var/log/gpupd.log
LOG_FDROID=/var/log/fdroid.log

echo -e "\n********** $(date)\n" >> $LOG_GPU

$GPUPD -c $CONFIG -v $REPO/repo >> $LOG_GPU 2>&1

cd $REPO

echo -e "\n********** $(date)\n" >> $LOG_FDROID

fdroid update --create-metadata >> $LOG_FDROID 2>&1
```

Ainsi, votre dépôt se mettra à jour tous les jours. Et votre appareil vous notifiera dès qu'une mise à jour sera disponible. Et vous n'avez rien de Google sur votre téléphone, c'est magnifique.

# Inconvénients / améliorations possibles

Certaines application sont butées et requièrent la présence des services Google Play pour fonctionner, le cas le plus décevant étant Signal, que j'ai dû renoncer à utiliser. Peut-être que je trouverai un moyen de le compiler à ma sauce sans les dépendances qui m'embêtent.

Sinon, on pourrait travailler à trouver un moyen de télécharger les apps directement par le serveur, et ne pas être obligé de passer par Firefox. Ça pourra être l'objet d'un article ultérieur, si je trouve un moyen convainquant de le faire.
