Android O abandonne TYPE_SYSTEM_OVERLAY au profit de TYPE_APPLICATION_OVERLAY, ce qui entraîne la rupture des applications qui se superposent au-dessus de la barre d'état.
Le filet de messages décrivant les nouvelles fonctionnalités destinées aux utilisateurs trouvées dans Android O commence à ralentir maintenant que les utilisateurs ont eu des semaines pour tester le logiciel sur leur appareil. Cependant, de très nombreux changements sont apportés en coulisses et sont lentement découverts. L'autre jour, nous avons publié un article sur l'un de ces changements concernant les appareils Nexus et Pixel fonctionnant sous Android O. adoption de SDCardFS. Mais aujourd'hui, nous aimerions discuter d'un changement qui affectera les développeurs de certaines applications, notamment celles qui superposition en haut de la barre d'état. Ces applications semblent être cassé dans l'aperçu du développeur Android O, que vous pourriez à première vue considérer comme un simple bug, mais en approfondissant la documentation de référence, cela peut être un changement prévu par Google.
Android O brise les superpositions de la barre d'état
L’une de mes choses préférées à propos d’Android est sa personnalisation. Les utilisateurs rootés ou exécutant des ROM personnalisées peuvent personnaliser leurs barres d'état du système de manière native sans pratiquement aucune restriction, mais si votre appareil n'est pas rooté, vous disposez de moins d'options. Heureusement, il existe de nombreuses applications sur le Google Play Store qui vous permettent de modifier l'apparence de la barre d'état à un niveau de base. Ceci est possible grâce à une savante combinaison de System Overlay Windows pour afficher une barre d'état personnalisée sur celle existante, Des écouteurs de notifications pour afficher les notifications, et éventuellement un service d'accessibilité pour permettre de teinter contextuellement la personnalisation barre d'état.
Les deux captures d'écran ci-dessus montrent à quoi ressemblerait ma barre de notification lorsque j'utilisais l'une des nombreuses applications de superposition de barre d'état disponibles sur le Play Store. Ces captures d'écran ont été prises sur un Huawei Mate 9 non rooté exécutant EMUI 5.0. Pour ceux d'entre vous qui ne connaissent pas EMUI, la barre d'état ne ressemble en rien aux captures d'écran ci-dessus. Au lieu de cela, cela ressemble à ceci :
Si l'apparence de votre barre d'état de stock ne vous dérange pas, alors des applications telles que Statut ou Barre d'état du matériau sont des aubaines. Mais si ou lorsque votre appareil est mis à jour vers Android O, ces applications risquent de ne plus fonctionner. Voici à quoi ressemblent ces deux mêmes applications sur un Google Pixel exécutant Android O Developer Preview :
Plutôt que la superposition bloque la barre d'état d'origine, elle ressemble à la superposition chevauchements avec la barre d'état d'origine, ce qui entraîne un énorme gâchis.
Malheureusement, cela rend effectivement des applications comme celles-ci inutiles. Et ce ne sont pas seulement vos applications typiques de création de thèmes de barre d'état qui sont affectées par cela - toutes les applications qui nécessitent l'affichage d'une superposition en haut de la barre d'état sont concernées.
Voici une liste de quelques applications populaires qui peuvent devenir inutiles :
- Statut (500 000 - 1 000 000 d'installations)
- Barre d'état du matériau (1 000 000 - 5 000 000 d'installations)
- Cool Tool - Statistiques du système (500 000 - 1 000 000 d'installations)
- Télécinéma (50 000 - 100 000 installations)
- Nettoyer la barre d'état (100 000 - 500 000 installations)
- Petit noyau (100 000 - 500 000 installations)
Et une liste de certaines applications qui fonctionneront, mais ne peuvent plus se superposer au-dessus de la barre d'état (restreignant les fonctionnalités précédentes) :
- Crépuscule (5 000 000 - 10 000 000 d'installations)
- La tête haute (100 000 - 500 000 installations)
- Moniteur de ressources Mini (50 000 - 100 000 installations)
- Moniteur réseau mini (1 000 000 - 5 000 000 d'installations)
Il existe de nombreuses autres applications sur le Play Store qui utilisent une sorte de superposition au-dessus de la barre d'état, mais vous pouvez déjà dire qu'un tel changement affectera de nombreuses applications potentiellement utilisées par des millions de personnes. utilisateurs. Alors que se passe-t-il ici ?
TYPE_SYSTEM_OVERLAY est obsolète
À chaque nouvelle itération d'Android, Google introduit et désapprouve (désigne comme obsolète et à supprimer) diverses fonctionnalités. Cette fois, la fonctionnalité qui se trouve sur le billot est TYPE_SYSTEM_OVERLAY. Pour citer le page de référence pour ce que cette fonctionnalité a offert aux développeurs :
TYPE_SYSTEM_OVERLAY
Type de fenêtre: fenêtres superposées au système, qui doivent être affichées par-dessus tout le reste. Ces fenêtres ne doivent pas prendre le focus de saisie, sinon elles interféreront avec le protège-clavier. Dans les systèmes multi-utilisateurs, s'affiche uniquement dans la fenêtre de l'utilisateur propriétaire.
Essentiellement, ce type de fenêtre permet à une application de dessiner sur n'importe quel élément de l'écran, y compris la barre d'état. Cependant, à partir d’Android O, ce type de fenêtre est obsolète. Pour les applications non système, Google recommande aux développeurs d'utiliser TYPE_APPLICATION_OVERLAY à la place. Pour citer le page de référence pour ce que fait ce nouveau type de fenêtre :
TYPE_APPLICATION_OVERLAY
Type de fenêtre: Les fenêtres de superposition des applications sont affichées au-dessus de toutes les fenêtres d'activité (types entre
FIRST_APPLICATION_WINDOW
etLAST_APPLICATION_WINDOW
) mais sous les fenêtres système critiques comme la barre d'état ou l'IME.Le système peut modifier la position, la taille ou la visibilité de ces fenêtres à tout moment pour réduire l'encombrement visuel pour l'utilisateur et également gérer les ressources.
Le système ajustera l'importance des processus avec ce type de fenêtre pour réduire le risque que le tueur à faible mémoire les tue.
Dans les systèmes multi-utilisateurs, s'affiche uniquement sur l'écran de l'utilisateur propriétaire.
Comme vous pouvez le constater, ce nouveau type de fenêtre permet aux applications de superposer du contenu sur toutes les autres fenêtres d'activité. sauf "Fenêtres système critiques comme la barre d'état ou IME" (IME fait référence au clavier). C'est bien pour des applications comme Facebook Messenger, car les têtes de discussion fournies par cette application n'ont aucun but de rester au-dessus de la barre d'état, mais cela affecte négativement la plupart des applications que j'ai mentionnées plus tôt.
De plus, il ne semble pas y avoir de solution de contournement que les développeurs puissent utiliser pour le moment. On pourrait s'attendre à ce que, afin d'éviter ce problème sur Android O, les développeurs créent simplement leurs applications pour cibler le SDK 25 (Android 7.1.1). Cependant, comme l'a souligné le développeur de Status sur Reddit, Google a remplacé TYPE_SYSTEM_OVERLAY avec TYPE_APPLICATION_OVERLAY, et la modification est indépendant du SDK cible version. Les développeurs utilisant TYPE_SYSTEM_OVERLAY doivent actuellement utiliser TYPE_APPLICATION_OVERLAY pour maintenir la compatibilité. Par conséquent, quelle que soit la version cible du SDK sur laquelle une application particulière est basée, elle peut n'utilisez plus TYPE_SYSTEM_OVERLAY sur Android O.
Que peut-on faire à ce sujet?
On ne sait pas exactement pourquoi Google a effectué ce changement, car ils n'ont pas encore fourni d'explication officielle. Je suppose qu'il s'agit d'une tentative visant à améliorer la sécurité sur Android en empêchant les utilisateurs peu méfiants d'installer accidentellement des applications qui bloquent ou remplacent de manière malveillante leur barre d'état. Malheureusement, ce changement intercepte de nombreuses applications parfaitement légitimes qui utilisent TYPE_SYSTEM_OVERLAY dans des tirs croisés.
Les développeurs qui utilisent cette fonctionnalité ont ouvert des rapports de bogues sur Issue Tracker d'Android (#260787 et #36574245) pour protester contre le changement et demander une API alternative, mais un Googleur a commenté le tracker avec le déclaration suivante:
Statut: ne sera pas corrigé (comportement prévu)
Nous avons effectué un suivi auprès de l'équipe produit et d'ingénierie et avons reçu des suggestions selon lesquelles les développeurs peuvent utiliser les activités SHOW_WHEN_LOCKED pour afficher lorsque l'appareil est verrouillé, mais il n'est intentionnellement plus possible de l'afficher sur l'écran de verrouillage/sur le volet de notification
Pour l'instant, il semble que ces développeurs n'aient pas de chance, car les développeurs ont souligné que FLAG_SHOW_WHEN_LOCKED ne permet toujours pas de superposer les fenêtres au-dessus de la barre d'état. On ne sait pas exactement ce que les développeurs de ces applications peuvent faire, à part prier pour que Google change les choses, ou faire des ravages à ce sujet.
Puisqu'il ne s'agit que du premier Developer Preview pour Android O, il est toujours possible pour Google de modifier son esprits et fournir cette fonctionnalité pour les applications qui ne ciblent pas Android O, ou pour que Google restaure TYPE_SYSTEM_OVERLAY. Mais si les choses restent comme elles sont actuellement, vous pouvez dis adieu à ces applications. Et ce serait vraiment dommage.
Merci à Eli Irvin d'avoir testé plusieurs de ces applications pour moi !