Pour faire bref, j'ai (complètement ? partiellement ? cela reste à voir) brické mon téléphone Android (le OnePlus 6 que j'avais acheté il y a un an et demi), j'ai dû en acheter un autre en catastrophe (un Google Pixel 4a), et j'ai eu une cascade suffisamment improbable de malchances que j'ai dû évacuer un tas de mauvais karma dans l'histoire. Mais la séquence d'événements en question est tellement pleine de rebondissements qu'elle mérite d'être consignée ici en un peu de détails. Si ça ne vous intéresse pas, j'ajoute quelques remarques générales (certaines techniques, d'autres pas) à la fin.
Dramatis personæ :
- OnePlus 6
- Un téléphone Android d'un constructeur chinois
(basé à Shēnzhèn ; plutôt haut de gamme par rapport à ce dont on a
l'habitude venant de ce pays). Le mien a
été acheté en 2019, et choisi parce
qu'il pouvait faire tourner LineageOS (cf. ci-dessous) et
que mon poussinet avait un modèle proche dont il était assez content.
Son nom de code Android est
enchilada
ce qui peut expliquer l'apparition de ce mot à différents endroits. - Pixel 4a
- Un téléphone Android par Google. (J'en ai
conseillé l'achat à ma mère tout récemment, et j'ai pu vérifier qu'il
n'était pas mauvais. Par ailleurs, il permet également de faire
tourner LineageOS.) Ses spécifications sont assez
semblables au OnePlus 6 (en un peu plus petit, ce qui peut être vu
comme un avantage ou un inconvénient). Son nom de code Android
est
sunfish
. - LineageOS
- Une version communautaire d'Android
(i.e., des modifications par rapport à l'Android de base de Google
apportées par une communauté d'amateurs ; elle est un peu plus libre
et un peu plus hackable, et elle supporte des appareils un peu plus
anciens). Elle succède à celle qui s'appelait
CyanogenMod
, et j'utilise l'une ou l'autre sur mes téléphones Android depuis dix ans environ. (Noter que toute version d'Android est toujours un peu modifiée par rapport à la version de référence AOSP distribuée par Google et qui n'est, en fait, utilisée par personne telle quelle : certaines le sont moins, comme celle de Google lui-même, d'autres le sont énormément comme celles des téléphones Samsung ; LineageOS est tout de même très proche de AOSP.) - TWRP
- Un
mode rescue
pour Android, c'est-à-dire une sorte de petit OS spécialisé dans lequel on peut démarrer le téléphone pour faire des opérations de maintenance, comme un backup complet, des modifications de permissions, ou l'installation d'une nouvelle version du système principal. (LineageOS vient avec son propre mode rescue, mais il permet de faire beaucoup moins de choses que TWRP : essentiellement juste installer ou réinstaller LineageOS, ou effacer toutes les données.) - Fastboot
- Un mode de démarrage de beaucoup de téléphones
Android qui se situe à encore plus bas niveau qu'Android ou que le
mode rescue (cf. ci-dessus) : le mode fastboot est géré par le
bootloader (le petit programme qui démarre en premier et qui sert
normalement juste à lancer Android ou le mode rescue) et qui permet,
avec une interface extrêmement minimale, de réinstaller certaines
parties (
partitions
) de la mémoire du téléphone (par exemple celui qui contient le mode rescue, ou celui qui contient les pilotes de périphérique fournis par le constructeur comme le firmware radio). - Google Apps
- Une surcouche par rapport à Android fournie par Google (et qui, à la différence de AOSP, est propriétaire). Non nécessaire à faire tourner Android, mais nécessaire à un grand nombre d'applications dessus (tout ce qui utilise de près ou de loin les services Google, par exemple les cartes façon Google Maps). L'installation de LineageOS est donc généralement immédiatement suivie d'une installation de Google Apps qui peut elle-même se faire par différentes sources (j'utilise celles de MindTheGapps).
Le déroulement des faits, maintenant, par ordre chronologique :
-
Acte I. Où j'essaie d'installer de migrer mon OnePlus 6 de LineageOS 16.0 (Android 9) vers 18.1 (Android 11), et où je me retrouve un peu coincé.
- Scène 1. Mon téléphone OnePlus 6 est
actuellement sous LineageOS 16.0
(
lineage-16.0-20200325-nightly-enchilada
pour être précis) : je décide d'essayer de le mitrer vers la version 18.1. Je commence par faire un backup depuis TWRP de toutes les partitions, que je sauvegarde sur l'ordinateur, à restaurer en cas de problème dans les étapes suivantes. Avec ça, je me dis que je suis en sécurité. Dans la foulée, je mets à jour TWRP lui-même (vers la versiontwrp-3.5.2_9-0-enchilada.img
), mais je ne crois pas que ceci ait joué de rôle pour la suite. - Scène 2. Conformément aux instructions
trouvées sur
le site de LineageOS, j'essaie, en utilisant le mode
fastboot, de mettre à jour les partitions constructeur du téléphone
(c'est-à-dire les partitions contenant des pilotes ou autres bouts de
code ou de données propriétaires, fournies par le constructeur, et
utilisées par Android pour que ce dernier soit relativement peu
dépendant du téléphone même si ceci reste à ce stade un vœu pieux ;
concrètement, j'ai
utilisé cet
outil pour extraire les fichiers
.img
dupayload.bin
contenu dans le fichier fourni par le constructeur, i.e., par OnePlus dans mon cas). Ceci était probablement une erreur (rien ne me dit que le nouveau LineageOS n'aurait pas tourné avec le firmware précédent), mais probablement pas fatale à ce stade. Le mode fastboot refuse de mettre à jour certaines de ces partitions (qualifiées decritiques
) : je trouve des avis contradictoires sur quoi faire à ce sujet (certains disent d'ignorer le problème, d'autres de lancerfastboot unlock_critical
— mais après coup je découvrirai que ça ne fait rien sur ce téléphone-ci —, d'autres encore de passer en mode rescue et de mettre à jour ces partitions à l'aide de l'outil Unixdd
depuis le mode Rescue — cf. par exemple ici, et je finirai par faire ça en II.1). Dans l'immédiat, j'ignore le problème de ces partitionscritiques
et je passe à la suite. - Scène 3. J'installe le nouveau
LineageOS
(
lineage-18.1-20210727-nightly-enchilada
) puis des Google Apps (MindTheGapps-11.0.0-arm64-20210412_124247
) depuis TWRP. J'essaie de démarrer le téléphone en mode normal : l'animation de démarrage de LineageOS s'affiche (tout n'est donc pas cassé), mais elle mouline indéfiniment sans jamais finir (je comprendrai plus tard la cause probable de ce problème, mais, à ce stade, je ne le sais pas ; l'outil de diagnosticadb logcat
montre des tonnes d'erreurs, dont des problèmes de permission, que je pense — à ce stade — peut-être liées au fait que je n'ai mis à jour qu'une partie des partitions constructeur).
- Scène 1. Mon téléphone OnePlus 6 est
actuellement sous LineageOS 16.0
(