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

Legacy icon does not show when using adaptive icon

我刚刚使用 android studio

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

当我 运行 我的项目现在在我的设备上 运行ning 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 错误还是我遗漏了什么?

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

显然 ic_launcher.xml 文件混淆了旧的 Android 版本,这对除 O 以外的所有版本都隐藏了它。无论如何,我的图标现在适用于所有版本(至少 SDK 11,至少).

解决方案是 mipmap-anydpi-v26/ic_launcher.xml 适用于 API 26 级及以上的自适应图标,而对于其他 API 级,则使用 ic_launcher.png(注意:不是 ic_launcher.xml) 在所有 mimpap 文件夹中。


解释:

这是基本问题 mipmap-anydpi 优先于所有其他问题 mipmap-*。因此,如果在 mipmap-anydpi 中找到资源,它将始终优先。现在 mipmap-anydpi-v26 是一个过滤器,它表示来自 mipmap-anydpi-v26 的资源将始终被选择,而不管设备密度如何 仅当 API 级别为 26 或更高时 (奥利奥)。

现在您的清单有 android:icon="@mipmap/ic_launcher"

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

问题发生在 API 等级低于 26 级时。Android stats 寻找名为 ic_launcher 的资源。由于 API 级别限制,它永远不会在 mipmap-anydpi-v26 中搜索。接下来,它将在 mipmap-anydpi 中查找资源,如果不存在,则查找实际密度资源,例如。 mipmap-mdpi

接下来,不能给android 低于sdk 26 的设备ic_launcher.xml,因为它不知道自适应图标是什么。

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

如果仍然无法正常工作,请检查您的 XML 中的架构,如果您使用从 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.xmlic_launcher_round.xml 放在 mipmap-anydpi-v26 中(确保你不应该有 ic_launcher.png/jpgic_launcher_round.png/jpg 在同一文件夹中)。

把你的 ic_launcher.png 放在 mipmap-hdpi/mdpi/xhdpi/xxhdpi/xxxhdpi 中(确保你不应该有 ic_launcher.xmlic_launcher_round.xml 在这些同一个文件夹)。

通过这样做,您不会得到任何错误 building/running 项目。

希望对遇到同样问题的人有所帮助...

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

我使用 android 工作室只是为了生成在我的 config.xml 文件中使用的来源(图像的背景和前景层)。

所以它看起来像这样:-

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

以上配置适用于 Android API level > 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"/>