如何在 React Native Android 应用程序中处理产品风味?

我的 React Native 应用程序有 3 个版本:App1、App2、App3。其中每一个都有一个开发和生产版本。

我在 android/app/build.gradle 中进行了如下设置:

flavorDimensions "client", "backend"
    productFlavors {
        app1 {
            applicationId="com.app1name"
            dimension "client"
        }
        app2 {
            applicationId="com.app2name"
            dimension "client"
        }
        app3 {
            applicationId="com.app3name"
            dimension "client"
        }
        dev {
            dimension "backend"
        }
        prod {
            dimension "backend"
        }
    }
}

然后我设置了 android/app/src 文件夹,如下所示:

src
-- main
   -- assets
   -- java
      -- com
         -- app1name
            MainActivity.java
            MainApplication.java  
    -- res
    AndroidManifest.xml

但我不确定将其他应用程序文件夹放在哪里,而且我尝试的任何方法似乎都不起作用。我试过了:

src
-- app2name
   -- assets
   -- java
      -- com
         MainActivity.java
         MainApplication.java  
    -- res
    AndroidManifest.xml

(对于 app3 也是如此)

我试过了:

src
-- main
   -- assets
   -- java
      -- com
         -- app2name
            -- assets
            -- java
            -- com
               MainActivity.java
               MainApplication.java  
            -- res
            AndroidManifest.xml  
    -- res
    AndroidManifest.xml

我确保每个 AndroidManifest.xml/MainActivity.java/MainApplication.java 在顶部都有正确的包名称。

但是,当我尝试运行 app1name 时出现以下错误(它可以构建和安装):

Starting: Intent { cmp=com.app2name/.MainActivity }
Error type 3
Error: Activity class {com.app2name/com.app2name.MainActivity} does not exist.

所以看起来好像它正在尝试启动 app1,但由于某种原因也在寻找 app2 中的主要活动,我不明白它为什么这样做。

我究竟做错了什么?

stack overflow How do I handle Product Flavors in a React Native Android app?
原文答案
author avatar

接受的答案

解决了

我也在经历这个问题,这个视频对我帮助很大。尽管您仍然必须单独管理 env 变量,但本视频中以非常简单的方式很好地解释了风味。 https://youtu.be/TvBm7UZNyy8


答案:

作者头像

要处理多个 productFlavours,您需要在运行命令中添加应用程序 ID 后缀或完整的应用程序 ID。

npx react-native run-android --variant=app1nameDebug --appId=com.app1name

或者,如果您的 productFlavors 中提到了 appSuffixId,那么

npx react-native run-android --variant=app1nameDebug --appIdSuffix=dev