You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用不同版本启动图标适配:Adaptive Icon在Pre-Oreo设备显示默认图标

解决Android自适应图标在Pre-Oreo设备显示默认图标的问题

这个问题的核心原因很明确:Adaptive Icon(自适应图标)是Android 8.0(API 26)才引入的特性,Pre-Oreo(API 25及以下)的系统根本不认识<adaptive-icon>标签的XML文件,所以当你把自适应图标XML放在普通资源目录里时,旧系统加载失败就会 fallback 到默认图标。下面是具体的解决步骤:

1. 调整资源目录结构,区分版本

你需要为不同API版本的设备提供对应的图标资源:

  • 为Pre-Oreo设备:在mipmap-mdpimipmap-hdpimipmap-xhdpi等常规分辨率目录中,放置传统的PNG格式图标(就是你之前用的非自适应正方形图标)。
  • 为Oreo+设备:创建mipmap-anydpi-v26目录(这个目录里的资源只有API 26及以上系统才会加载),在里面放置你的自适应图标XML文件。

2. 配置自适应图标XML(仅在v26目录)

mipmap-anydpi-v26/ic_launcher.xml中,编写标准的自适应图标结构,示例如下:

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 图标背景,可以是颜色或Drawable -->
    <background android:drawable="@color/icon_background" />
    <!-- 图标前景,就是你的logo内容 -->
    <foreground android:drawable="@drawable/ic_logo_foreground" />
</adaptive-icon>

如果需要圆形图标(对应清单里的roundIcon),可以在同一个v26目录下创建ic_launcher_round.xml,结构和上面一致,只是可以调整前景的适配圆形区域的样式。

3. 修正清单文件的图标配置

保持清单里的android:icon指向通用的@mipmap/ic_launcher,系统会自动根据版本加载对应资源:

<application
    android:icon="@mipmap/ic_launcher"
    <!-- roundIcon是API 26+才支持的,旧系统会自动忽略 -->
    android:roundIcon="@mipmap/ic_launcher_round"
    android:label="@string/app_name"
    ...>
    ...
</application>

这里注意:不要把android:icon直接指向自适应图标XML,否则旧系统找不到可用的PNG图标就会显示默认图标。

偷懒小技巧:用Android Studio自动生成

如果你不想手动配置目录和文件,可以用Android Studio的Image Asset Wizard一键生成:

  • 右键点击res目录 → New → Image Asset
  • 选择Launcher Icons (Adaptive and Legacy)类型
  • 按照向导设置前景、背景、图标名称等,完成后Studio会自动生成所有需要的资源(包括各分辨率的PNG和v26的自适应XML),同时自动更新清单文件的配置。

常见错误排查

  • 检查常规mipmap-*dpi目录里是否有对应的PNG图标,文件名要和ic_launcher一致
  • 确认自适应图标XML只放在mipmap-anydpi-v26目录,不要放在普通mipmap目录里
  • 如果你用了roundIcon,确保v26目录里有对应的ic_launcher_round.xml,或者常规目录里有对应的圆形PNG(不过旧系统不关心roundIcon)

内容的提问来源于stack exchange,提问作者Kapil Jindal

火山引擎 最新活动