Peu de temps avant de partir pour New York[#], j'ai mis à jour mon téléphone Android en passant de la version 4.3.quelquechose à la version 4.4.4 (en fait, je n'utilise pas l'Android brut fourni par Google mais la version dérivée CyanogenMod, et j'ai mis à jour celui-ci de la version 10.2.1 à la version 11.20141115, mais il ne semble pas que cette subtilité soit pertinente pour ce que je vais dire). J'ai été étonné du peu de problèmes rencontré lors de cette mise à jour (le GPS n'a pas été cassé, le Wifi fonctionnait toujours, l'appareil photo marchait, etc.) : il a seulement effacé tous mes contacts, ce qui, en matière de transition d'une version d'Android à une autre, est globalement en-dessous de la ration usuelle d'emmerdes. Mais juste l'avant-veille de mon départ, je me suis rendu compte qu'il y avait un autre problème que je n'avais pas remarqué : le téléphone ne marchait plus. Plus exactement, lors d'un appel téléphonique, je n'entendais rien, et mon interlocuteur n'entendait rien non plus : tout se passait exactement comme si le micro et le haut-parleur étaient cassés (mais uniquement pour ce qui est de passer un appel).
Alors certes, j'utilise assez peu mon téléphone mobile pour téléphoner : je m'en sers surtout pour consulter le Web (principalement Wikipédia, d'ailleurs) et les cartes (Google Maps et/ou OSMand), et un peu comme appareil photo, et pour communiquer essentiellement par Google Talk (rebaptisé Hangouts, mais en fait j'utilise un client différent — et par ailleurs merdique — appelé Xabber) et par SMS. Néanmoins, un téléphone qui ne permet pas de téléphoner, fût-ce occasionnellement, c'est un peu navrant.
Il s'avère que le problème (touchant le Nexus 4 et peut-être aussi
le Nexus 6, sous Android 4.4.4 et apparemment certaines versions
ultérieures) est connu :
voir ici, ici, ici
et ici
(d'après les commentaires, il semble bien que les gens soient affectés
aussi sur la version d'Android officielle de Google et pas seulement
sous CyanogenMod). La faute en est à Google, non pas Google
architecte d'Android mais Google auteur d'un machin énorme,
monolithique et propriétaire qui vient s'ajouter par-dessus Android,
qui s'appelle le Google Services Framework
et qui
contient essentiellement tout ce que Google n'a pas voulu rendre libre
dans Android, donc, beaucoup de choses (en principe on peut
fonctionner sans, mais ça implique de se passer d'énormément de
choses, dont toutes les applications Google et en fait la majorité des
applications non-libres d'Android, donc en fait la majorité des
applications tout court d'Android). Apparemment, une mise à jour du
Google Services Framework a eu pour effet de casser le son pendant les
appels téléphoniques sur le Nexus 4 et le Nexus 6. Ce dernier étant
le téléphone phare de Google, c'est amusant de constater à quel point
ils s'en foutent complètement (ou alors ils ne sont pas au courant :
il est bien connu que l'outil public pour rapporter des bugs dans
Android est un pur placébo, personne de chez Google ne va jamais y
mettre les pieds, et ils ne veulent pas de feedback de la part de
l'extérieur).
Il y a deux solutions partielles au problème (qu'on découvre en
suivant les liens ci-dessus et en ignorant 99.99% des commentaires
venus d'utilisateurs totalement neuneus qui racontent n'importe quoi).
L'une consiste à désactiver un tout petit bout
du Google Services Framework (par exemple
au moyen de la commande suivante tapée en tant que root dans une ligne
de commande sur le téléphone : pm disable
com.google.android.gms/com.google.android.gms.checkin.CheckinService
).
L'autre consiste à désactiver un bout un peu plus gros (au moyen de la
commande pm disable com.google.android.gms
). Aucune
n'est vraiment satisfaisante : la première, celle qui désactive
uniquement com.google.android.gms.checkin.CheckinService
,
a certes très peu d'effets sur le fonctionnement logiciel normal du
téléphone, mais elle a pour conséquence que la batterie se vide trois
ou quatre fois plus vite, manifestement parce que quelque chose
d'autre dans le Google Services Framework
essaie de rentrer en communication avec le Checkin
Service, n'y arrive pas, et pose un « wake lock », qui empêche
le téléphone d'entrer en hibernation, tant qu'il n'y arrive pas. La
seconde solution, celle qui désactive
tout com.google.android.gms
, n'a pas ce problème, mais
elle fait que la plupart des applications Google dysfonctionnent, dont
le Play Store (heureusement, pas Google Maps, ou en tout cas pas
complètement).
Pour résumer, j'ai le choix entre un téléphone qui ne peut plus
passer d'appels, un téléphone dont la batterie ne tient que quelques
heures, ou un téléphone dont la plupart des applications ne marchent
plus. La merdicité de ces trois options a été soigneusement calculée
par Murphy pour que je ne sache pas exactement quel mal est le pire,
même si j'ai provisoirement choisi le dernier (en
désactivant com.google.android.gms
). Mais je me demande
bien combien de temps cette petite blague va durer.
[#] Pour ceux qui s'étonneraient que j'aie l'idée de mettre à jour mon téléphone juste avant de partir en vacances, ce qui est une façon insolente de provoquer la loi de Murphy, il y a quand même une justification : je partais avec deux téléphones (l'un devant servir à loger ma carte SIM française pour rester joignable à mon numéro français, l'autre à héberger la carte SIM américaine nécessaire pour avoir un accès Internet nomade) ; or l'un de ces téléphones est une merde aux specs mal documentées (un Geeksphone Revolution), et du coup je n'ai essentiellement pas de choix de ce que je mets dessus — or je voulais que les deux soient sur des versions aussi semblables que possible d'Android, pour ne pas avoir à m'arracher les cheveux en passant de l'un à l'autre.