2

我有两个应用程序:Application Module AApplication Module B。他们都使用库模块 X

库模块 X中,根据使用库的应用程序,我有一些不同的行为。我认为有三种选择可以实现这一目标。

硬编码提及应用程序。someClass将由应用程序注入或仅检查包。(我认为最糟糕的一个):

if (someClass.isApplicationA()) {
   doThis()
} else {
   doThat()
}

硬编码提及将要完成的事情。someClass将由应用程序注入。(我也不太喜欢):

if (someClass.shouldDoThis()) {
   doThis()
} else {
   doThat()
}

3º 使用香精。我将为 Application Module A 定义风味A 为Application Module B定义风味B。在Library Module X中,我将定义这两种风格。所以我会将自定义代码放在一些特定的类中,这些类对每种风格都有不同的版本。

customClassByFlavor.justDoIt()

在任何地方,我只看到风味被用于单个应用程序。这是对它的正确使用吗?

4

1 回答 1

0

实现这一目标的优雅方法是

  1. 要求应用在其清单中指定标识符/键
  2. 要求应用在其 build.gradle 文件中指定一个变量
     defaultConfig {
            resValue "string", "identifier", "identifierConstant"      
        }

在您的应用程序中使用变量,就像您访问字符串常量一样

    context.getString(R.string.identifier);
  1. 从 build.gradle 文件中的默认 applicationId 中选择 app 的包名
   defaultConfig {
        applicationId "com.google.example"            
    }
于 2019-09-19T08:08:55.417 回答