Android 使用自适应图标时不显示旧图标

Android 使用自适应图标时不显示旧图标,android,android-studio,android-icons,Android,Android Studio,Android Icons,我刚刚使用android Studio中的Image Asset Studio将我的应用程序图标转换为与android o的自适应图标兼容 当我现在在运行API 25的设备上运行我的项目时,我会得到默认的绿色android图标,而不是我的图标 这是我的舱单 <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/App

我刚刚使用android Studio中的
Image Asset Studio
将我的应用程序图标转换为与android o的自适应图标兼容

当我现在在运行API 25的设备上运行我的项目时,我会得到默认的绿色android图标,而不是我的图标

这是我的舱单

<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">


这只是Android Studio的一个bug还是我遗漏了什么?

我也遇到了同样的问题,通过将我的
mipmap anydpi
目录重命名为
mipmap-anydpi-v26
解决了这个问题


显然,
ic_launcher.xml
文件混淆了旧的Android版本,这将它隐藏在除O之外的所有版本中。无论如何,我的图标现在可以在所有版本上工作(至少到SDK 11).

解决方案是将适用于API级别26及以上以及其他API级别的自适应图标的
mipmap-anydpi-v26/ic_launcher.xml
放入所有MIMAP文件夹中的
ic_launcher.png
(注意:不是ic_launcher.xml)


说明

以下是基本问题
mipmap anydpi
优先于所有其他
mipmap-*
。因此,如果在
mipmap anydpi
中找到资源,它将始终优先使用。现在,
mipmap-anydpi-v26
是一个高于此的过滤器,它表示无论设备密度如何,
mipmap-anydpi-v26
中的资源将始终被拾取,只有在API级别为26或更高的情况下(Oreo)

现在你的清单上有了android:icon=“@mipmap/ic_launcher”

如果您的设备具有API级别26或以上,android将选择使用
mipmap-anydpi-v26/ic_launcher.xml
,一切正常

当API级别低于26时,就会出现问题。Android统计数据正在寻找名为
ic\u launcher
的资源。由于API级别限制,它永远不会在
mipmap-anydpi-v26
中搜索。接下来,它将在
mipmap anydpi
中查找资源,如果没有,则查找实际密度资源,例如
mipmap mdpi

接下来,您不能将
ic_launcher.xml
提供给sdk 26以下的android设备,因为它不知道什么是自适应图标


因此,解决方案是将适用于API级别26及以上的自适应图标的
mipmap-anydpi-v26/ic_launcher.xml
,以及适用于其他API级别的自适应图标,放入所有MIMAP文件夹中的
ic_launcher.png
(注意:不是ic_launcher.xml)。

如果仍然不起作用,请检查您的xml schmema,如果您从Android studio使用自动导入,它不会工作,应该是/apk/res/android。代码如下:

<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>

我遇到了同样的问题,解决方法如下

把你的
ic_launcher.xml
ic_launcher_round.xml
放在mipmap-anydpi-v26(确保你不应该把
ic_launcher.png/jpg
ic_launcher_round.png/jpg>放在同一个文件夹中)

将您的
ic_launcher.png
放入mipmap hdpi/mdpi/xhdpi/xxhdpi/xxxhdpi(确保您不应该将
ic_launcher.xml
ic_launcher\u round.xml
放在同一文件夹中)

通过这样做,您在构建/运行项目时不会出现任何错误


希望它能帮助一些有同样问题的人…

我将以一种非常简单的方式来总结这一点。

我使用android studio只是为了生成config.xml文件中使用的源(图像的背景层和前景层)

所以它看起来是这样的:-

<icon background="resources/android/icon/ldpi_background.png" density="ldpi" foreground="resources/android/icon/ldpi_foreground.png">

上述配置在Android API级别>25时运行良好

旧版本android中遗留图标的主要问题来了

根据cordova官方文档-旧版本的android不支持自适应图标-使用上述config.xml,它将只选择前台部分作为备用图标,这是旧版本中图标不好看的原因

因此,我为此应用了以下修复(根据cordova官方文档)

添加带有静态图像图标的src属性-因此,在旧版本中,它将使用该图标,而在最新版本中,它将优先使用自适应图标,从而解决这两个问题

修复后,配置将如下所示:-

<icon background="resources/android/icon/ldpi_background.png" density="ldpi" foreground="resources/android/icon/ldpi_foreground.png" src="resources/android/icon/drawable-ldpi-icon.png"/>


这里也一样。你解决了这个问题吗?我有v26目录,但我仍然在遗留API上得到默认的绿色android。@JPM,我建议你用一些源代码来回答一个新问题(比如OP在这里做了什么)。我很有信心这项技术能像广告中所宣传的那样发挥作用,但不可能猜出你的应用程序中可能出现了什么问题。结果我仍然有mipmap anydpi目录和mipmap-anydpi-v26。一旦我删除了mipmap anydpi,那么所有版本的图标都是正确的。这仍然是一个问题吗?我使用的是
mipmap-anydpi-v26
,用户说无根像素启动器没有显示自适应图标,我想知道这是否是因为这个原因。似乎仍然是个问题。