Expo SDK47 Android端启动屏未注册警告问题求助
解决方案
一、Android原生配置修复
问题核心是Android端未正确初始化闪屏注册,需在MainActivity中添加闪屏启动代码:
- 打开项目内
android/app/src/main/java/[你的包名]/MainActivity.java(Kotlin项目则为MainActivity.kt) - 添加导入语句:
- Java:
import expo.modules.splashscreen.SplashScreen; - Kotlin:
import expo.modules.splashscreen.SplashScreen
- Java:
- 在
onCreate方法中,super.onCreate(savedInstanceState)之后、loadApp()之前插入闪屏启动代码:- Java示例:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 注册闪屏 SplashScreen.show(this); loadApp("main"); } - Kotlin示例:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); // 注册闪屏 SplashScreen.show(this); loadApp("main"); }
- Java示例:
二、JS端代码优化
你的代码存在未捕获Promise错误和组件挂载不完整的问题,修改后代码如下:
import React, { useCallback, useEffect } from 'react'; import { ThemeProvider } from 'styled-components' import { View } from 'react-native'; import { Routes } from './src/routes'; import { AppProvider } from './src/hooks'; import * as SplashScreen from 'expo-splash-screen'; import * as Font from 'expo-font'; import { Roboto_300Light, Roboto_400Regular, Roboto_500Medium, Roboto_700Bold, } from '@expo-google-fonts/roboto'; // 包裹闪屏阻止自动隐藏逻辑,捕获异常 useEffect(() => { const preventSplashHide = async () => { try { await SplashScreen.preventAutoHideAsync(); } catch (e) { console.warn('阻止闪屏自动隐藏失败', e); } }; preventSplashHide(); }, []); export default function App() { const [fontsLoaded] = Font.useFonts({ Roboto_300Light, Roboto_400Regular, Roboto_500Medium, Roboto_700Bold }); const onLayout = useCallback(async () => { if (fontsLoaded) { try { await SplashScreen.hideAsync(); } catch (e) { console.warn('隐藏闪屏失败', e); } } }, [fontsLoaded]); // 字体未加载时返回空View,确保组件正常挂载 if (!fontsLoaded) { return <View style={{ flex: 1 }} />; } return ( <View style={{ flex: 1 }} onLayout={onLayout}> <ThemeProvider theme={theme}> <AppProvider> <Routes /> </AppProvider> </ThemeProvider> </View> ); }
三、额外检查项
- 确认
package.json中expo-splash-screen版本为~0.17.5(对应Expo SDK47) - 裸工作流项目执行
npx expo prebuild --platform android重新生成原生代码,之后用npx expo run:android重新构建应用
内容的提问来源于stack exchange,提问作者Jhonata Bonadio
相关产品推荐
相关产品推荐

