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

Expo 53 - 安卓模拟器中expo-maps导致应用崩溃求助

Expo 53 - 安卓模拟器中expo-maps导致应用崩溃求助

我完全懂你现在的头疼——Expo 53搭配expo-maps在iOS上好好的,一到安卓打开带地图的模态框就直接崩,翻遍文档也找不到原因,确实让人抓狂。结合你贴出来的package.json和app.json配置,我整理了几个大概率能解决问题的排查方向,你可以挨个试试:


1. 先确认Google Maps API密钥是否配置到位

安卓上使用expo-maps必须配置Google Maps API密钥,iOS可能会自动处理相关权限,但安卓这边没密钥的话直接就会崩溃!看你现在的app.json里的expo-maps插件配置,好像没加安卓的API密钥,这很可能是罪魁祸首。

你需要在app.json的expo-maps插件配置里补充安卓API密钥:

["expo-maps", {
  "requestLocationPermission": true,
  "locationPermission": "Allow $(PRODUCT_NAME) to use your location for finding nearby dessert shops",
  "android": {
    "apiKey": "你的Google Maps API密钥" // 替换成你自己的密钥
  }
}]

配置完后,记得重新运行expo run:android让配置生效。

2. 检查依赖版本的兼容性

虽然你用的expo-maps ~0.11.0和Expo 53是匹配的,但可以试试更新到SDK 53支持的最新补丁版本,避免版本里的已知bug:

npx expo install expo-maps@latest

同时确认你的react-native-reanimated版本(~3.17.4)和Expo 53的要求一致,这个版本是对的,但也要确保babel.config.js里已经添加了reanimated的插件,否则可能和地图或bottom sheet产生冲突:

// babel.config.js
module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: ['react-native-reanimated/plugin'], // 必须加这个
  };
};

3. 排查模态框与地图的渲染冲突

你用了@gorhom/bottom-sheet作为模态框,这类交互式组件有时候会和地图的渲染时机冲突。可以先做个测试:把地图放到普通页面里渲染,不要放在模态框里,看会不会崩溃。如果普通页面没问题,那就是模态框和地图的交互问题:

试试延迟渲染地图,等模态框完全打开后再加载地图组件:

import { useState } from 'react';
import MapView from 'expo-maps';
import BottomSheet from '@gorhom/bottom-sheet';

export default function MapModal() {
  const [isMapReady, setIsMapReady] = useState(false);

  const handleSheetOpen = () => {
    // 延迟500ms渲染地图,给模态框足够的初始化时间
    setTimeout(() => setIsMapReady(true), 500);
  };

  return (
    <BottomSheet onOpen={handleSheetOpen}>
      {isMapReady ? (
        <MapView
          style={{ flex: 1 }}
          initialRegion={{
            latitude: 37.78825,
            longitude: -122.4324,
            latitudeDelta: 0.0922,
            longitudeDelta: 0.0421,
          }}
        />
      ) : null}
    </BottomSheet>
  );
}

4. 检查安卓模拟器的环境

安卓模拟器的Google Play服务版本过低也会导致地图崩溃:

  • 打开模拟器里的Google Play应用,检查是否有可用更新,把Google Play服务更到最新
  • 试试换一个带Google Play的模拟器镜像(比如选择“Google Play”结尾的系统镜像),或者换Android 13/14的模拟器测试
  • 条件允许的话,直接在真实安卓设备上测试,排除模拟器本身的问题

5. 获取崩溃日志精准定位

如果以上方法都不行,一定要去拿崩溃日志,这是找到问题根源的关键:

  1. 用debug模式启动安卓应用:expo run:android --variant debug
  2. 触发崩溃后,打开新的终端执行:adb logcat *:E
  3. 从日志里找到和expo-maps、Google Maps相关的错误信息,比如权限缺失、API密钥错误、native层的异常等

如果还是解决不了,把崩溃日志贴出来,大家能更精准地帮你定位问题~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:39:29