React Native Android端无法正确读取对应环境.env文件问题
问题描述
配置了prod、dev、staging三个环境,对应.env.prod、.env.staging、.env.dev文件,根目录存在主.env文件。iOS端可根据scheme自动填充主.env的环境变量,符合预期;但Android端主.env内容始终无变化,无法读取选中的flavor/build对应的环境变量。
使用命令运行:
react-native run-android --variant=stagingdebug --appId=*****.staging
甚至添加ENVFILE=.env.staging参数仍无效,终端日志显示已读取对应文件,但主.env未更新:
... > Configure project :app Reading env from: .env.staging ...
Android/app/build.gradle关键配置如下:
... project.ext.envConfigFiles = [ proddebug: ".env.prod", prodrelease: ".env.prod", devrelease: ".env.dev", devdebug: ".env.dev", stagingrelease: ".env.staging", stagingdebug: ".env.staging" ] ... android { compileSdkVersion rootProject.ext.compileSdkVersion flavorDimensions "default" productFlavors { prod { minSdkVersion rootProject.ext.minSdkVersion applicationId "*******" targetSdkVersion rootProject.ext.targetSdkVersion resValue "string", "build_config_package", "*******" } staging { minSdkVersion rootProject.ext.minSdkVersion applicationId "*****.staging" targetSdkVersion rootProject.ext.targetSdkVersion resValue "string", "build_config_package", "******" } dev { minSdkVersion rootProject.ext.minSdkVersion applicationId "******.dev" targetSdkVersion rootProject.ext.targetSdkVersion resValue "string", "build_config_package", "*******" } } ...
解决步骤
清理Android构建缓存
缓存残留可能导致旧环境变量不更新,执行以下命令清理后重新构建:cd android && ./gradlew clean cd .. && react-native run-android --variant=stagingdebug --appId=*****.staging调整build.gradle配置顺序
project.ext.envConfigFiles必须放在apply plugin: "com.android.application"和apply plugin: "react-native-config"之前,否则配置不生效,调整后示例:project.ext.envConfigFiles = [ proddebug: ".env.prod", prodrelease: ".env.prod", devrelease: ".env.dev", devdebug: ".env.dev", stagingrelease: ".env.staging", stagingdebug: ".env.staging" ] apply plugin: "com.android.application" apply plugin: "react-native-config" ...修正代码读取逻辑
Android端react-native-config不会自动覆盖根目录主.env文件,它直接读取对应flavor的.env文件。代码中需直接通过Config.VAR_NAME(React Native层)或BuildConfig.VAR_NAME(Android原生层)读取环境变量,而非依赖主.env的内容。验证环境变量注入结果
在Android原生代码中添加日志验证:// 在MainApplication.java中添加 import android.util.Log; import com.lugg.ReactNativeConfig.ReactNativeConfigPackage; ... @Override public void onCreate() { super.onCreate(); // 打印目标环境变量 Log.d("ENV_CHECK", "API_URL: " + BuildConfig.API_URL); }运行后查看Logcat,确认是否读取到
.env.staging中的变量值。检查命令行variant名称
Gradle的variant名称为flavor+buildType,buildType首字母需大写,尝试调整命令:react-native run-android --variant=StagingDebug --appId=*****.staging
内容的提问来源于stack exchange,提问作者nouman-stackone

