【问题标题】:Android Flavors :Applying only flavor specific code to a source setAndroid Flavours:仅将特定于风味的代码应用于源集
【发布时间】:2019-07-31 15:52:08
【问题描述】:

我在使用源集时遇到了一些问题,我有一个包含大部分通用代码的主源集,但是之前的开发人员包含了一个构建风格开关,例如:

    if (Application.inKiosk) {
        navigation.visibility = View.INVISIBLE
        val employeeSelectionFragment = EmployeeSelectionFragment()
        employeeSelectionFragment.setAllList(employees)
        employeeSelectionFragment.setCallback(employeeSelected)
        supportFragmentManager.beginTransaction().add(R.id.small_container, employeeSelectionFragment, "EmployeeSelectionFragment").commitNow()
        currentTimeRecord = TimeRecord()
    } else {
        setupTimeRecords(employees!!.first()!!.id, savedInstanceState == null)
    }

我想提取此风味特定块并将其包含在其自己的源集文件夹中。我无法访问通用成员,例如导航。我将如何提取此部分?

        navigation.visibility = View.INVISIBLE
        val employeeSelectionFragment = EmployeeSelectionFragment()
        employeeSelectionFragment.setAllList(employees)
        employeeSelectionFragment.setCallback(employeeSelected)
        supportFragmentManager.beginTransaction().add(R.id.small_container, employeeSelectionFragment, "EmployeeSelectionFragment").commitNow()
        currentTimeRecord = TimeRecord()

【问题讨论】:

  • 在某个类中创建fun setupKioskMode(navigation: View, supportFragmentManager: FragmentManager): TimeRecord。使用您想要的实现(例如,上面的代码)在每个特定于风味的源集中创建该类的实现。让main 源集从您的if 块调用setupKioskMode(),在上面显示的第一个sn-p 中。
  • 大家好,感谢您的建议,但有什么办法可以摆脱主源集中的 if (Application.inKiosk) { } 吗?
  • 啊,好的。在这种情况下,您的函数将具有其他名称 (setupWhatever()) 并具有附加参数(对于您传递给 setupTimeRecords() 的那些东西)。一个源集将使用您的 Application.inKiosk true 场景实现该功能;另一个会打电话给setupTimeRecords()。您的 main 源集将用对 setupWhatever() 的调用替换整个 if/else,并且将根据您的构建变体使用 setupWhatever() 的正确实现。
  • 这个解决方案对我有用,谢谢:)!

标签: android android-flavors


【解决方案1】:

在产品风格之间拆分代码的基本方法是:

  • 在一个维度中设置 2+ 个风味

  • 为每种风格创建源集(src/flavorOne/src/flavorTwo/

  • 在这两种风格中定义一些类

  • 让该类实现提供您正在寻找的每种风格功能的函数(例如,setupTimeRecords() 在一种风格中,在自助服务终端中的代码在另一种风格中)

  • 让您的 main 源集使用该类并调用该函数

Gradle 将从风味的源集中为您正在构建的任何构建变体提取类的实现,这就是 main 代码将在该构建中使用的实现。

【讨论】:

  • 根据 commons 的建议,我能够创建两个源集,一个用于移动构建,另一个用于平板电脑构建,具有实现特定风味代码的通用功能。然后在我的共享源集中我只调用这个函数并调用正确的风味相关代码。
猜你喜欢
  • 2017-08-10
  • 2018-11-02
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多