gpt4 book ai didi

java - 为什么 gradle 不会覆盖不同 Android 风格的 Java 类?

转载 作者:IT老高 更新时间:2023-10-28 20:40:32 26 4
gpt4 key购买 nike

我有一个具有 2 种风格的 android 应用程序:- flavor 1- flavor 2

我的目录树是:

/src/main
/src/flavor1
/src/flavor2

main 具有默认源集。 flavor1 和 flavor2 目录有自己的源集,gradle 会自动获取。如果我将资源文件添加到 flavor 目录中,它会从 main 覆盖它,并且工作正常。

但是,如果我将一个 java 类添加到 flavor2 中以覆盖“main”中的另一个类(例如,一个需要在 flavor2 中不同的 Activity ),它不会替换它并且它说有一个重复的类我的项目。我只是通过从“主”目录中删除类并将其添加到所有 flavor 文件夹中来实现这一点。

有没有办法像资源文件一样覆盖 java 类?为什么会这样?

最佳答案

Is there a way I can override java classes just like resource files ?

没有。来自 Android 工具团队的 Xavier Ducrohet 简要讨论了其中的一些 here .

虽然有很多方法可以实现您想要的,但稍后会详细介绍。

why does this happen?

您的 Java 代码需要编译。假设您从 main 源集中的其他类中引用了一个类 Foo,那么无论哪种风格,该 Foo 类都必须具有相同的公共(public) API正在编译。如果您能够将主 Foo 完全替换为特定风格的 Foo,那么这可能不成立。这当然不是用工具解决的不可能的问题,但当前构建工具的解决方案是根本不让你这样做。

当然对于图片等资源,这完全不同——只要存在某个版本的资源,Android就可以正常使用。

但是,您可以创建一个类的特定风格的实现,以在您的 main 源集中使用。最简单的方法是在每个 flavor 中简单地放置一个 Foo,而不是在您的 main 源集中提供一个 Foo。为了获得奖励积分,请在您的 main 源集中为这些实现创建一个接口(interface),以确保特定 flavor 的实现符合相同的接口(interface)并且不会导致构建错误。

关于java - 为什么 gradle 不会覆盖不同 Android 风格的 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com