Expo app.json中splash配置iOS正常Android失效问题求助
问题解决与配置逻辑说明
一、Android端无需插件实现启动屏的解决步骤
本地构建时iOS能直接读取app.json的splash配置生效,但Android默认仅展示adaptiveIcon,核心原因是两者启动屏的原生实现机制不同:iOS通过Expo自动生成的LaunchScreen.storyboard加载配置,而Android默认用主题的windowBackground占位,且Expo核心模块未默认覆盖这部分配置。不用插件的话,可按以下步骤调整:
确保
app.json配置完整
在expo.splash中明确指定Android端的图片和参数,示例:{ "expo": { "splash": { "image": "./assets/splash-icon.png", "resizeMode": "cover", "backgroundColor": "#ffffff", "android": { "image": "./assets/splash-icon-android.png", "resizeMode": "cover" } } } }运行
expo prebuild(若未生成原生文件),让Expo将图片资源同步到Android项目的res/drawable-*目录。修改Android原生主题配置
打开android/app/src/main/res/values/styles.xml,创建或修改启动屏主题:- 先在
res/drawable目录新建splash_background.xml,定义启动屏背景和图片布局:<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/splash_background"/> <item> <bitmap android:src="@drawable/splash_icon" android:gravity="center"/> </item> </layer-list> - 在
styles.xml中添加或修改启动屏主题:<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/splash_background</item> <item name="android:windowFullscreen">true</item> </style> - 打开
AndroidManifest.xml,将MainActivity的android:theme设置为@style/SplashTheme。
- 先在
重新构建项目
运行expo run:android重新构建,Android端即可展示指定的启动屏图片。
二、多种启动屏配置方式的原因
Expo提供多种配置方式,是为了适配不同的开发场景:
app.json基础配置:针对快速开发场景(如Expo Go、轻量本地构建),iOS端因启动屏机制统一,Expo可自动完成适配;但Android原生启动屏灵活性高,Expo仅做基础适配(展示adaptiveIcon),避免过度干预原生逻辑。expo-splash-screen插件:解决多端启动屏体验不一致的问题,封装了Android和iOS的启动屏控制逻辑,支持自定义隐藏时机、过渡动画等,适合需要统一体验的生产级项目。- 原生手动配置:针对完全自定义需求的场景,允许开发者直接修改原生代码,摆脱Expo插件的约束,适合深度定制的本地构建项目。
内容的提问来源于stack exchange,提问作者Alireza Dehghan
相关产品推荐
相关产品推荐

