React Native项目多包名配置咨询:基于.env与build.gradle实现多应用发布
React Native 多应用同代码库配置方案
一、准备多环境配置文件
在项目根目录创建对应每个应用的 .env 文件,比如 .env.app1、.env.app2,文件内定义核心配置:
# .env.app1 APP_NAME=应用1 PACKAGE_NAME=com.example.app1 APP_ICON=mipmap/ic_launcher_app1
# .env.app2 APP_NAME=应用2 PACKAGE_NAME=com.example.app2 APP_ICON=mipmap/ic_launcher_app2
二、在 Gradle 中读取环境变量
打开 android/app/build.gradle,在文件最顶部添加读取 .env 的逻辑,支持通过命令行参数指定环境:
// 加载指定.env文件的方法 def loadEnv(String envFileName) { def envFile = file("../../${envFileName}") if (envFile.exists()) { def properties = new Properties() envFile.withInputStream { properties.load(it) } properties.each { key, value -> project.ext.set(key, value) } } } // 默认使用app1环境,可通过-Penv参数指定,比如-Penv=app2 def targetEnv = project.hasProperty('env') ? project.env : 'app1' loadEnv(".env.${targetEnv}")
三、配置 Gradle 应用参数
在 android 节点下修改 defaultConfig,将环境变量注入到应用配置中:
android { defaultConfig { // 替换包名 applicationId project.ext.PACKAGE_NAME // 生成动态应用名称资源 resValue "string", "app_name", project.ext.APP_NAME // 传递图标占位符到Manifest manifestPlaceholders = [appIcon: "@${project.ext.APP_ICON}"] } buildTypes { release { // 保留你的原有release配置(混淆、签名等) minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
四、修改 AndroidManifest.xml
将应用名称和图标替换为 Gradle 传递的变量:
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="${appIcon}" android:roundIcon="${appIcon}" <!-- 其他原有配置 --> >
五、准备多应用图标资源
将每个应用的图标文件放到 android/app/src/main/res/ 下对应分辨率的目录,比如:
mipmap-xxxhdpi/ic_launcher_app1.pngmipmap-xxxhdpi/ic_launcher_app2.png
如果需要更隔离的资源管理,可以为每个应用创建 flavor 专属资源目录,比如 src/app1/res/mipmap/、src/app2/res/mipmap/,这种方式需要配合 Gradle 的 productFlavors 使用(推荐):
android { productFlavors { app1 { applicationId "com.example.app1" resValue "string", "app_name", "应用1" manifestPlaceholders = [appIcon: "@mipmap/ic_launcher"] } app2 { applicationId "com.example.app2" resValue "string", "app_name", "应用2" manifestPlaceholders = [appIcon: "@mipmap/ic_launcher"] } } }
这种情况下,每个 flavor 会自动加载对应 src/flavorName/res/ 下的资源,无需在 .env 中指定图标路径。
六、构建独立安装包
方式1:通过环境变量参数构建
# 构建app1的release AAB ./gradlew bundleRelease -Penv=app1 # 构建app2的release AAB ./gradlew bundleRelease -Penv=app2
方式2:通过 flavor 构建(推荐)
# 构建app1的release AAB ./gradlew bundleApp1Release # 构建app2的release AAB ./gradlew bundleApp2Release
七、JS层读取环境变量(可选)
如果需要在 React Native 代码中使用 .env 变量,可以安装 react-native-config 库,之后直接读取:
import Config from 'react-native-config'; console.log('当前应用名称:', Config.APP_NAME); console.log('当前包名:', Config.PACKAGE_NAME);
注意事项
- 每个应用的
PACKAGE_NAME必须唯一,否则无法上传至 Play Store - 上传到 Play Store 时,每个应用需要单独创建应用条目(同一开发者账号下支持多个应用)
- 签名配置需确保每个应用使用对应签名(或同一签名密钥,Play Store 允许同一密钥签署多个应用)
内容的提问来源于stack exchange,提问作者priyansh kasera
相关产品推荐
相关产品推荐

