So the documentations of Expo say that we must use the expo-splash-screen to setup a splash screen, but then there's a key in app.json named splash
under expo
which does that, with no problems, without the extra plugin, but it only works on IOS.
"expo": {
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
}
}
}
Right now on android I simply see the adaptiveIcon being shown for the splash screen, not the splash-icon.png btw I'm using expo, building it locally, no Go and no EAS
I expect to see the same splash screen everywhere! without the extra plugin installed, why are there more than one way to do a splash screen?
On iOS, the splash
key in app.json
is still supported and works as expected, but on Android the behavior is different because the platform requires native configuration for splash screens. Without using the expo-splash-screen
plugin, Android falls back to displaying the adaptive icon while the app initializes, which is why you only see the adaptive icon instead of your defined splash image. The plugin generates the necessary native XML resources and configuration for Android, ensuring the splash screen is displayed consistently. In practice, this means that while iOS can rely on the splash
property alone, Android requires the plugin to achieve the same result across both platforms. If you’re working specifically on iOS development, you may also find resources like iOS app development services helpful for understanding best practices and platform-specific requirements.