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

react-native-config在release构建中无法读取.env配置问题

react-native-config 多Flavor场景Release构建读不到.env配置排查方案

核心排查点与对应修复

  • 首先检查Gradle配置是否覆盖Release变体
    绝大多数场景下该问题是因为只给Debug构建配置了.env注入逻辑,Release构建未关联对应环境文件。
    1. 确认android/app/build.gradle中react-native-config的引入位置正确,必须放在com.android.application、com.facebook.react插件引入之后,不要把该引入语句放在debug专属判断逻辑中:
      apply plugin: "com.android.application"
      apply plugin: "com.facebook.react"
      // 全局生效,不要包裹在buildType判断里
      apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
      
    2. 不要只在debug buildType下配置env路径,需要在applicationVariants遍历逻辑中给所有flavor+buildType的组合绑定对应env文件,示例配置:
      android {
          // 省略其他基础配置
          flavorDimensions "env"
          productFlavors {
              dev { dimension "env" }
              staging { dimension "env" }
              prod { dimension "env" }
          }
      
          applicationVariants.all { variant ->
              // 按flavor名匹配根目录下的.env.xxx文件,命名需完全对应
              def targetEnvFile = rootProject.file(".env.${variant.flavorName}")
              if (targetEnvFile.exists()) {
                  variant.javaCompileProvider.get().options.compilerArgs += [
                      "-AenvFile=${targetEnvFile.absolutePath}"
                  ]
              }
          }
      }
      
  • 检查混淆规则是否遗漏
    Release构建默认开启R8/ProGuard代码混淆裁剪,未加白名单规则会把BuildConfig中的配置字段、react-native-config相关类移除,导致读取为空。
    在android/app/proguard-rules.pro中添加如下规则:
    -keep class 你自己的应用包名.BuildConfig { *; }
    -keep class com.lugg.ReactNativeConfig.** { *; }
    -dontwarn com.lugg.ReactNativeConfig.**
    
  • 清理全量构建缓存后重打包
    配置修改后如果直接执行打包命令,会复用旧的构建缓存导致配置不生效,打包前执行全量清理:
    • 安卓端:cd android && ./gradlew clean
    • iOS端:清理Xcode DerivedData缓存,执行cd ios && pod install后重新构建
  • 校验env文件位置与命名
    所有.env文件必须放在项目根目录(和package.json同级),文件名后缀必须和对应flavor名大小写完全一致,比如flavor名为prod时,对应文件必须命名为.env.prod,不能出现.env.Prod、.env.production这类不匹配的命名。
  • iOS端Release Scheme配置校验
    如果是iOS平台多Scheme场景,需要确认每个Scheme的Release模式下也配置了env注入脚本:在Xcode的Build Phases中,将react-native-config的环境读取脚本放在「Bundle React Native code and images」阶段之前,脚本内容参考:
    set -e
    echo ".env.${SCHEME_NAME}" > /tmp/envfile
    "${SRCROOT}/../node_modules/react-native-config/ios/ReactNativeConfig/BuildXCConfig.rb" "${SRCROOT}/.." "${SRCROOT}/tmp/envfile"
    
  • 版本兼容问题
    如果项目开启了Hermes引擎,将react-native-config升级到1.5.0及以上版本,旧版本存在Hermes Release模式下配置读取为空的兼容问题。

内容的提问来源于stack exchange,提问作者Amal Mohan N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:01:29