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

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.png
  • mipmap-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:35:55