Je viens de convertir l'icône de mon application pour qu'elle soit compatible avec les icônes adaptatives d'Android o à l'aide du Image Asset Studio
dans Android Studio.
lorsque j'exécute mon projet maintenant sur mon périphérique exécutant l'API 25, l'icône Android verte par défaut s'affiche et non pas mon icône.
c'est mon manifeste
<application
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme"
Android:allowBackup="false"
Android:roundIcon="@mipmap/ic_launcher_round"
tools:replace="allowBackup"
tools:ignore="GoogleAppIndexingWarning">
et ce sont les fichiers créés par le studio d'actifs image
Est-ce juste un bug d'Android Studio ou ai-je oublié quelque chose?
J'ai eu le même problème et je l'ai résolu en renommant mon répertoire mipmap-anydpi
en mipmap-anydpi-v26
.
Apparemment, le fichier ic_launcher.xml
confond les anciennes versions d’Android, ce qui le cache de tous, sauf de O. De toute façon, mes icônes fonctionnent désormais sur toutes les versions (jusqu’au SDK 11, au moins).
La solution consiste à avoir mipmap-anydpi-v26/ic_launcher.xml
pour les icônes adaptatives applicables aux API de niveau 26 et supérieur et pour les autres niveaux d'API, mettez ic_launcher.png
(Remarque: pas ic_launcher.xml) dans tous les dossiers mimpap.
Explication :
Voici le problème de base mipmap-anydpi
prévalent sur tous les autres mipmap-*
. Donc, si une ressource est trouvée dans mipmap-anydpi
, elle aura toujours la préférence. Désormais, mipmap-anydpi-v26
est un filtre au-dessus de ce filtre indiquant que les ressources de mipmap-anydpi-v26
seront toujours sélectionnées, quelle que soit la densité des périphériques uniquement si le niveau de l'API est égal ou supérieur à 26 (Oreo).
Maintenant, votre manifeste a Android:icon="@mipmap/ic_launcher"
Si votre appareil est doté d'une API de niveau 26 ou supérieur, Android choisira d'utiliser mipmap-anydpi-v26/ic_launcher.xml
et tout fonctionnera correctement.
Le problème survient lorsque le niveau de l'API est inférieur à 26. Statistiques Android recherchant une ressource nommée ic_launcher
. Il n'ira jamais chercher dans mipmap-anydpi-v26
en raison d'une contrainte de niveau d'API. Ensuite, il cherchera la ressource dans mipmap-anydpi
et si ce n’est pas le cas, la ressource de densité réelle, par exemple. mipmap-mdpi
.
Ensuite, vous ne pouvez pas donner ic_launcher.xml
à des appareils Android inférieurs à sdk 26 car il ne sait pas ce que sont les icônes adaptatives.
La solution consiste donc à avoir mipmap-anydpi-v26/ic_launcher.xml
pour les icônes adaptatives applicable aux API de niveau 26 et supérieur et pour les autres niveaux d'API, mettez ic_launcher.png
(Remarque: pas ic_launcher.xml) dans tous les dossiers mimpap.
Si cela ne fonctionne toujours pas, vérifiez votre schéma XML, si vous utilisez l'importation automatique à partir d'Android Studio, cela ne fonctionnera pas, cela devrait être/apk/res/Android. Voici le code:
<adaptive-icon xmlns:Android="http://schemas.Android.com/apk/res/Android">
<background Android:drawable="@mipmap/ic_launcher_background"/>
<foreground Android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>