反应本机自定义 buildType 不使用地铁

React native custom buildType not using metro

我需要为不同的 applicationId 构建相同的应用程序,以便我可以将其发布在 Play Store / App Store 上作为我公司的一些客户的私有应用程序。

我决定使用 react-native-config,因为它可以让我轻松更改 applicationId 和一些 env 变量。

我创建了一些.env.${variant}个文件,即在下面的例子中,.env.customer1.

我已经设置了需要的buildTypes如下:

...
buildTypes {
   debug {
      ...
   }
   customer1 {
      initWith debug
      applicationIdSuffix "customer1"
   }
}

我强迫react.gradle在构建这些变体时不捆绑

project.ext.react [
   bundleInCustomer1: false,
   devDisabledInCustomer1: false
]

然后我使用这个命令行在我的物理设备上运行

copy .env.customer .env && react-native run-android --variant=customer1 --appIdSuffix 'customer1'

结果是该应用程序已在我的设备上构建并启动,但我看到的是该应用程序的旧版本(可能是几周前我使用 assembleRelease 构建的最后一个应用程序),metro 正在启动但是当我试图强制重新加载时告诉我这个,否则什么都不告诉我

warn No apps connected. Sending "reload" ...

我试过了没有成功

gradlew clean
npm start --cache-reload
npm cache clean --forced
npm i

构建没有任何变体的应用程序(因此使用默认调试)可以正常工作。

感谢,我已经成功解决了我的问题。

我现在使用 flavors,而不是 buildTypes

所以,

android {
    ...
    flavorDimensions "standard"
    defaultConfig {
        applicationId "com.Whosebug"
    ...
    productFlavors {
        customer1 {
            applicationId "com.Whosebug.customer1"
            dimension "standard"
        }
    }
}

并通过

启动

react-native run-android --variant=customer1Debug --appIdSuffix 'customer1'