【问题标题】:Can I have different classes (using flavors) in a library module for different application modules?对于不同的应用程序模块,我可以在库模块中有不同的类(使用风味)吗?
【发布时间】:2019-09-18 12:33:50
【问题描述】:

我有两个应用程序:应用程序模块 A应用程序模块 B。他们都使用Library Module X

Library Module X 内部,我有一些不同的行为,具体取决于哪个应用程序正在使用该库。我认为实现这一目标的三种选择。

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

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

硬编码提及将要做什么。 someClass 将由应用程序注入。 (我也不太喜欢):

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

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

customClassByFlavor.justDoIt()

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

【问题讨论】:

  • 味道是邪恶的。应用程序应该将变化的行为传递给库类的构造函数。

标签: android android-build-flavors android-flavors


【解决方案1】:

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

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

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

    context.getString(R.string.identifier);
  1. 从build.gradle文件中默认的applicationId中选择app的包名
   defaultConfig {
        applicationId "com.google.example"            
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多