Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Flavors:仅将特定于flavor的代码应用于源代码集_Android_Android Flavors - Fatal编程技术网

Android Flavors:仅将特定于flavor的代码应用于源代码集

Android Flavors:仅将特定于flavor的代码应用于源代码集,android,android-flavors,Android,Android Flavors,我在源代码集方面遇到了一些问题,我有一个主源代码集,其中包含大多数常见代码,但之前的开发人员包含了一个构建风格开关,例如: if (Application.inKiosk) { navigation.visibility = View.INVISIBLE val employeeSelectionFragment = EmployeeSelectionFragment() employeeSelectionFragment.setAllLi

我在源代码集方面遇到了一些问题,我有一个主源代码集,其中包含大多数常见代码,但之前的开发人员包含了一个构建风格开关,例如:

    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/

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

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

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


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

Create
fun setupKioskMode(导航:View,supportFragmentManager:FragmentManager):某些类中的TimeRecord
。使用所需的实现(例如,上面的代码),在每个特定于味道的源集中创建该类的实现。在上面显示的第一个代码片段中,从
if
块调用
main
源代码集
setupKioskMode()
。嘿,commons,谢谢你的建议,但是有没有办法从主源代码集中去掉if(Application.inKiosk){}?啊,好的。在这种情况下,您的函数将具有其他名称(
setupwhater()
),并将具有其他参数(用于传递到
setupTimeRecords()
)中的内容)。一个源代码集将使用您的
应用程序实现该功能。inKiosk
true
场景;另一个将调用
setupTimeRecords()
。您的
main
源代码集将通过调用
setupwhater()
替换整个
if
/
else
,并且将根据您的构建变量使用
setupwhater()
的正确实现。此解决方案对我有效,谢谢:)!根据commons的建议,我能够创建两个源代码集,一个用于移动构建,另一个用于平板构建,具有实现特定于味道的代码的通用函数。然后在我的共享源代码集中,我只调用这个函数,并调用正确的依赖于味道的代码。