我正在开发一个使用Flavors
. 我的项目中目前有 4 种口味,但很快就会有 6-7 种口味。假设我有 4 种口味,f1、f2、f3 和 f4。
我非常熟悉 main/ 中的 Android 资源被风格中的资源覆盖,但类不是(参见“重复类”编译错误)。因此,如果我MyClass
在 main/ 中,并且只想在f3中更改此类,我知道有一些解决方案:
- 从 main/ 中删除 MyClass 并将其放入所有口味中,然后在 f3/MyClass 中进行修改。这将导致维护地狱,我不想那样做。
- 在 main/a
AbstractMyClass
中拥有与 MyClass 相同的内容,在 f1、f2、f4 中用空的 MyClass 继承它并在 f3 中继承它并进行修改。同样,我不喜欢这个解决方案,因为它使班级人数增长得非常快,这破坏了项目的可读性。实际上,我目前使用的项目使用了这个解决方案,因为项目很大,所以这是一场噩梦。
我通过这篇漂亮的帖子找到了另一个解决方案:https ://stackoverflow.com/a/30548238/8096984 。
这篇文章描述了 f1、f2 和 f4 将具有指向包含 MyClass 的公共附加源集的链接(因此 MyClass 将不再位于 main/ 中),而 f3 将没有它。因此,它可以自由定义自己的 MyClass 实现,而不会出现重复类错误。
这个解决方案似乎是 3 个中最好的,但要覆盖 1 个。如果现在我有一个 MyClass2 我只希望在 f2 中有所不同怎么办?如果我将 MyClass2 放在额外的 sourceSet 中,那么我将不得不将 f3 链接到 sourceSet 并因此中断我因为重复类错误而执行的第一个覆盖。
我必须创建另一个源集吗?如果我这样做了,那么我真的不喜欢这个解决方案,因为你可以想象我在一个使用 6-7 种风格的大项目中必须创建的 sourceSet 的数量......
我应该怎么办?