如何在react-native中编写风味特定代码?

时间:2019-08-07 13:35:23

标签: javascript react-native android-productflavors

大约一周前,我开始开发一个白色标签的应用程序,其中每个应用程序之间唯一不同的是一些颜色值,图像来源和API端点,但是该应用程序本身却完全相同。< / p>

因此,最近几天我尝试着学习如何从同一个项目中构建多个应用程序...(这里主要关注Android)。在旅途中,我找到了一些指南,并通过遵循以下方法使其能够正常工作this guide并在我的build.gradle中设置产品口味。

    productFlavors {
    firstapp {
        applicationIdSuffix '.firstapp'
        resValue "string", "build_config_package", "com.myapp"
    }
    secondapp {
        applicationIdSuffix '.secondapp'
        resValue "string", "build_config_package", "com.myapp"
    }
}

好吧,现在我可以在开发过程中运行react-native run-android --variant=firstappDebug来模拟应用程序,而在发布gradlew assembleFirstappRelease时可以运行该应用程序,并且能够生成多个(在本例中为2个)不同的版本。

但是,作为一个初学者,我找不到合适的方法来编写针对特定风味的代码,该代码将在每次构建特定风味时进行渲染。

此外,我跟随this other guide或多或少地展示了如何执行此操作,但是同样,我缺乏适当执行某些步骤的知识,因此未能通过。我无法在 STEP 2 找出代码应该放在哪个文件中,而BuildConfig.FLAVORNSBundle.mainBundle() STEP 3 都不是{ {1}},UtilityManager.getTarget()

总而言之。我仍在努力学习,并且在环境变量方面病态更加深……但是我觉得有必要向社区寻求帮助。

1 个答案:

答案 0 :(得分:0)

这篇文章(这很重要)时我正在使用的解决方法是: 产品风味(Android)和XCode方案(iOS)来构建具有不同名称和图标的不同应用。

通过发出环境变量来编写特定风味/方案的代码。我使用所需的配置变量创建了多个.env文件。例如

//.env.mycustomenv

LOGIN_TITLE_TEXT= "My App"
LOGIN_STATUSBAR_CONTENT= "light-content"
LOGIN_BACKGROUND_COLOR= "#333"
LOGIN_SIMPLE_TEXT_COLOR= "#FFF"
LOGIN_TEXTINPUT_BACKGROUD_COLOR= "#FFF"
LOGIN_LOGIN_BUTTON_COLOR= "#009933"

从命令行像react-native-config一样简单地告诉RN使用$env:ENVFILE=".env.mycustomenv"来查看哪个.env文件。(在使用Powershell的Windows上)

react-native-config应该可以将上面的这些变量公开到您的.js文件中,并且确实可以,但是以我的经验,使用产品类型时,它没有用。因此,我开始使用react-native-build-config来完成该任务。.最后,我的代码如下所示:

import BuildConfig from "react-native-build-config"

export function MainStyle () {

  return(
    <>
      <StatusBar barStyle={`${BuildConfig.LOGIN_STATUSBAR_CONTENT}`} backgroundColor={BuildConfig.LOGIN_BACKGROUND_COLOR} />
      <TitleText>{CoBrandConfig.Login.LOGIN_TITLE_TEXT}</TitleText>
    </>
  )
}

依此类推...

我希望这个答案可以帮助其他找到这篇文章的开发人员寻求帮助。