如何生成适配全Android版本的应用图标 解决旧设备默认图标问题
问题原因
Android 8.0(API 级别26)才开始支持自适应图标规范,如果你之前用Android Studio Image Asset或者cordova-res生成图标时没开启旧版兼容,生成的自适应图标只会存到mipmap-anydpi-v26这个高版本专属资源目录下。API 25及更早的旧Android设备读取不到这个目录的图标资源,就会直接显示系统默认的绿色Android机器人图标。
修复步骤
用Android Studio生成全量兼容图标(最稳妥)
- 打开项目的Android工程模块,右键
res目录,依次选择New > Image Asset - 图标类型必须选
Launcher Icons (Adaptive and Legacy),不要单独选自适应图标选项 - 按设计稿上传前景、背景层素材后,切换到Legacy Icon配置tab:
- 必须勾选
Generate Legacy Icon选项 - 如果你自己的图标已经做了固定形状,形状选项选
None,避免系统给你强制加外框
- 必须勾选
- 确认图标名称和清单文件里的配置一致(默认是
ic_launcher),点击完成生成 - 生成后手动核对资源目录:所有不带v26后缀的
mipmap-mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi文件夹里,都要有对应的ic_launcher.png文件;mipmap-anydpi-v26目录下存放自适应图标的xml配置,这样才是覆盖全版本的资源结构。
修正cordova-res生成参数(Capacitor/Cordova项目适用)
默认配置下的cordova-res不会主动生成旧版兼容图标,需要手动加参数:
- 提前在项目根目录的
resources文件夹下放好1024*1024分辨率、无多余透明边的图标源文件,命名为icon.png - 执行生成命令时带上旧版兼容参数:
cordova-res android --type icon --include-legacy
- 生成后手动核对Android工程下的res目录,确认各密度的非v26 mipmap目录都生成了对应png图标,缺的话手动把生成的文件拷贝到对应目录。
必做的配置校验
- 打开
AndroidManifest.xml,找到<application>节点,确认android:icon属性值为@mipmap/ic_launcher,配置了圆形图的话android:roundIcon对应@mipmap/ic_launcher_round,不要引用drawable目录下的资源,也不要写错资源名 - 如果项目里集成了第三方启动屏、主题图标相关的库,检查这些库的配置有没有把启动图标引用改成仅v26版本存在的资源,导致低版本找不到
- 测试前先执行
Build > Clean Project清空构建缓存,同时卸载测试机上已经安装的旧版本应用再重新安装,增量编译经常会出现资源不更新的问题。
常见兼容坑
- 启动图标不要放在
drawable系列目录下,必须放在对应密度的mipmap目录,部分低版本厂商ROM无法识别drawable下的启动图标资源 - 给旧版本用的legacy图标不要留透明背景,API 26以下系统不支持自适应图标的透明层规则,带大面积透明的图标在部分旧ROM上会被直接替换成默认图标
- 如果项目配置了多渠道、多风味打包,要核对每个风味对应的res目录下有没有覆盖
ic_launcher资源,避免部分渠道包漏了旧版图标文件。
内容的提问来源于stack exchange,提问作者user17619876
相关产品推荐
相关产品推荐

