微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不使用 Metro

如何解决不使用 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

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

解决方法

感谢 this answer,我成功解决了我的问题。

我现在使用 buildTypes 而不是使用 flavors

所以,

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

并通过

启动

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。