manifest.json 中图标和启动图路径必须为本地相对路径,Android 需四档密度图标及对应 drawable 目录,iOS 依赖 LaunchImage.xcassets 且图标尺寸、格式、命名须严格符合审核规范。

manifest.json 里图标路径必须是本地相对路径,不能用网络地址
uni-app 打包时会把 manifest.json 中声明的图标文件从项目目录拷贝进原生工程,所以所有 icon 和 splashscreen 相关字段填的路径必须是项目根目录下的真实文件,比如 static/icon.png。填 https://xxx.com/icon.png 或绝对路径 /icon.png 都会静默失败——构建不报错,但 App 启动后显示默认白图或系统占位符。
- Android 要求至少提供
mdpi、hdpi、xhdpi、xxhdpi四套尺寸,对应icon下的四个字段;漏掉任一档,某些机型可能拉伸变形或取默认图 - iOS 只认
ios节点下的icon,且必须是正方形、无透明边、尺寸严格匹配(如appstore要求 1024×1024) - 启动图(
splashscreen)在 iOS 上只支持launchImage方式(即多张固定尺寸图),不支持launchPage(H5 页面方式);Android 则两者都支持,但launchPage在部分低版本 WebView 里渲染异常
Android 启动图适配要分 density 和 screen size 两层处理
Android 原生对启动图要求最细:不同屏幕密度(mdpi/hdpi/…)和不同屏幕宽高比(normal/large/xlarge)都要单独配图,否则容易出现黑边、裁切或模糊。uni-app 的 manifest.json 里 splashscreen.android 下的 drawable 字段就是干这个的。
-
drawable-mdpi、drawable-hdpi等字段值填的是资源目录名(不是图片名),对应nativeResources/android/res/下的真实目录,比如填drawable-hdpi就得确保该目录下有launch.png - 这些目录必须手动创建并放图,uni-app 不会自动帮你生成多倍图;建议用 Sketch/Figma 导出时直接按 1x/1.5x/2x/3x 比例切好
- 如果只配了
drawable-mdpi,其他 density 缺失,系统会降级拉伸,导致文字发虚、按钮糊成一片
iOS 启动图必须用 LaunchImage.xcassets,不能只靠 manifest.json
manifest.json 里的 splashscreen.ios.launchImage 只是告诉 uni-app “我要用 LaunchImage”,真正起作用的是 Xcode 工程里的 LaunchImage.xcassets。uni-app 构建时不会覆盖或生成它,你得自己维护。
- 新建 uni-app 项目时,iOS 启动图默认是空的,
nativeResources/ios/Assets.xcassets/LaunchImage.launchimage目录下没图,结果真机运行就是黑屏或白屏 - 必须用 Xcode 打开
unpackage/dist/build/ios/xxx.xcodeproj,在 Assets.xcassets 里手动添加 LaunchImage,并拖入各尺寸图(如 640×960、750×1334、1242×2208 等) - 如果改了
manifest.json却没同步更新LaunchImage.xcassets,打包后图标正常但启动图还是旧的——因为 Xcode 编译只读后者
图标尺寸填错会导致 iOS 审核被拒
iOS 对 App 图标尺寸卡得极死,尤其提交 App Store 时,AppIcon.appiconset 里少一张、尺寸差 1px、带 alpha 通道、命名不符规范,都会被拒。uni-app 的 manifest.json 本身不校验这些,全靠你手填。
- 必须提供 1024×1024 的
appstore图,且不能有透明背景(苹果明确要求 RGB 模式) - iPhone 小图标(
iphone下的icon-40、icon-60等)尺寸单位是 pt,但填的是 px 值,比如icon-60实际要放 120×120(@2x)或 180×180(@3x)的图,manifest.json里仍写"icon-60": "static/icon-60.png" - 别信网上“一键生成图标”的工具,很多导出的 iOS 图缺
icon-20或icon-29,或者把ipad图混进iphone分组,Xcode 会报 warning,App Store Connect 直接拒收
manifest.json 没用。










