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