应用图标必须改manifest.json+放对static/下的PNG文件+走云打包,三者缺一不可;icons须置于app-plus.distribute.icons下,Android配hdpi/xhdpi/xxhdpi/xxxhdpi四档(72×72/96×96/144×144/192×192),iOS配appstore(1024×1024)、2x(120×120)、3x(180×180),所有PNG须无Alpha通道、直角、路径以static/开头且大小写精确匹配。

应用图标必须改 manifest.json + 放对 static/ 下的 PNG 文件 + 走云打包(或离线打包),三者缺一不可;写 JS、改 Vue 页面、用 uni.setTabBarItem 都完全无效。
manifest.json 里图标配置必须在 app-plus → distribute → icons 下
很多人把 icons 塞进 h5 或根节点,或者把 name 写错位置——这会导致图标完全不读取。正确路径是:app-plus.distribute.icons.android 和 app-plus.distribute.icons.ios。Android 字段下要填全 mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi 五套路径;iOS 必须包含 appstore(1024×1024)、iphone.2x(120×120)、iphone.3x(180×180)。
static/ 目录下的图标文件有硬性要求
- 路径必须是
static/icon-xx.png格式,不能带前导斜杠(/static/❌)、不能用assets/、不能是网络地址 - 所有 PNG 必须关闭 Alpha 通道(无透明),否则 iOS 审核报
ITMS-90717,Android 部分机型边缘发灰 - 文件名大小写、扩展名、尺寸必须和字段严格匹配,例如
"xxhdpi": "static/icon-144.png",放成icon-144.PNG或icon144.png都会失败 - iOS 图标禁止圆角,必须直角;Android 可用圆角,但部分 ROM 有兼容问题
为什么改了没生效?常见失效原因
90% 的“不生效”卡在这几个点:
- 没删
unpackage/目录就重新运行,旧图标缓存残留 - 用了 HBuilderX 的「自动生成图标」功能,但生成的是
unpackage/res/下的图,而manifest.json仍指向static/——必须确保两者路径一致且文件真实存在 - 本地调试(运行到手机)看不出来,因为原生图标只在云打包或离线打包后的安装包中生效;真机调试时桌面显示的是开发版默认图标
- iOS 打包没配 Storyboard 启动页,导致整个图标配置被忽略(苹果系统级限制,非 uni-app 问题)
想动态换图标?得用原生插件或工程化替换
标准 uni-app 不支持运行时切换桌面图标。如果真有节日换肤、多品牌打包等需求:
- 短期方案:用
Ba-ChangeIcon这类原生插件,调用uni.requireNativePlugin('Ba-ChangeIcon'),但它仅支持 Android,且需用户重启 App 才生效 - 批量方案:用 CLI 工程化,在构建时根据环境变量替换
static/图标 + 修改manifest.json中的路径,再触发云打包;适合客户定制化场景 - 注意:插件方案无法上架 App Store,iOS 系统禁止运行时修改主图标;所有“动态”都只是预置多套图标+重启切换
最常被忽略的一点:iOS 图标不是“改完就能用”,它强制依赖 LaunchScreen.storyboard,哪怕你只动图标,没配 Storyboard ZIP 包,云打包也会静默忽略整个 icons.ios 配置。











