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

Expo+EAS构建的React Native App闲置后丢失环境变量求助

问题:Expo EAS构建的React Native应用后台/重启后环境变量丢失

现象

首次启动应用可正常通过expo-constants获取eas.json中定义的环境变量与密钥,但应用关闭或进入后台一段时间后,Constants.manifest.extra仅保留projectId,其余环境变量全部丢失。

原因分析

  1. Expo Updates自动更新机制拉取了不包含自定义环境变量的远程manifest
  2. 开发客户端缓存异常导致配置被覆盖
  3. 使用了已废弃的Constants.manifest而非静态构建的Constants.expoConfig
  4. app.config.ts中导入dotenv/config干扰了EAS构建时的环境变量注入

解决方案

1. 切换到Constants.expoConfig获取静态配置

Expo SDK 44+推荐使用Constants.expoConfig读取构建时嵌入的静态配置,它不会被更新机制修改,避免manifest被替换的问题:

import * as Constants from "expo-constants";

// 替换原有的manifest读取方式
const API_URL = Constants.expoConfig?.extra?.apiUrl;
const ADMOB_KEY = Constants.expoConfig?.extra?.admob?.ios; // 注意可选链避免报错

2. 移除app.config.ts中的dotenv导入

EAS构建时会自动注入eas.json里的环境变量,导入dotenv/config可能导致运行时读取本地.env文件(构建包中不存在),覆盖构建时的变量:

// 移除这一行
// import "dotenv/config";

3. 调整Expo Updates配置(开发阶段禁用自动更新)

开发阶段开启自动更新可能拉取不完整的manifest,修改app.config.ts的updates字段:

updates: {
  fallbackToCacheTimeout: 30000, // 网络异常时30秒后回退到缓存配置
  enabled: process.env.ENV !== 'DEVELOPMENT', // 开发阶段禁用自动更新
},

4. 清理开发客户端缓存并重新构建

如果是开发构建(developmentClient: true)出现问题:

  • 卸载设备上的开发客户端
  • 执行带清缓存的构建命令:
eas build --profile development --clear-cache

5. 验证构建产物中的配置

构建完成后,可解压APK/IPA包验证配置是否正确嵌入:

  • iOS:检查Expo.plist中的EXUpdatesExtra字段
  • Android:检查assets/expo-manifest.json中的extra字段

内容的提问来源于stack exchange,提问作者R. Milos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:23