You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo SDK47 Android端启动屏未注册警告问题求助

解决方案

一、Android原生配置修复

问题核心是Android端未正确初始化闪屏注册,需在MainActivity中添加闪屏启动代码:

  1. 打开项目内android/app/src/main/java/[你的包名]/MainActivity.java(Kotlin项目则为MainActivity.kt)
  2. 添加导入语句:
    • Java:import expo.modules.splashscreen.SplashScreen;
    • Kotlin:import expo.modules.splashscreen.SplashScreen
  3. 在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");
      }
      

二、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:45:31