Android 风味:仅将风味特定代码应用于源集

Android Flavors :Applying only flavor specific code to a source set

我 运行 在源代码集方面遇到了一些麻烦,我有一个包含大部分常用代码的主源代码集,但是之前的开发人员包含了构建风格开关,例如:

    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()

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

  • 在一个维度设置2+种口味

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

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

  • 让 class 实现提供您正在寻找的每种口味功能的功能(例如,setupTimeRecords() 在一种口味中,自助服务亭内的代码在其他口味)

  • 让您的 main 源集使用那个 class 并调用那个函数

Gradle 将从风格的源集中为您正在构建的任何构建变体引入 class 的实现,这就是 main 代码将使用的实现在那个版本中。