agu*_*aga 25 java android gradle android-build android-studio
我有一个2种口味的Android应用程序:-flavor1 -flavor2
我的目录树是:
/src/main
/src/flavor1
/src/flavor2
Run Code Online (Sandbox Code Playgroud)
main具有默认的源集.flavor1和flavor2目录有自己的源集,gradle自动获取.如果我将一个资源文件添加到flavor目录中,它会从main覆盖它,并且工作正常.
但是,如果我在flavor2中添加一个java类来覆盖"main"中的另一个,(例如,在flavor2中需要不同的活动),它不会替换它,并且它说我的项目中有一个重复的类.我只是通过从"main"目录中删除类并将其添加到所有flavor文件夹来实现此功能.
有没有办法像资源文件一样覆盖java类?为什么会这样?
Tan*_*.7x 34
有没有办法像资源文件一样覆盖java类?
从Android工具团队号泽维尔Ducrohet讨论了这个简单的在这里.
有一些方法可以实现你想要的东西 - 更多的是在一秒钟内.
为什么会这样?
您的Java代码需要编译.假设您Foo从main源集中的其他类引用了一个类,Foo该类必须具有相同的公共API,无论正在编译什么样的风格.如果你能够完全用Foo特定的风味取代主体Foo,这可能不成立.这当然不是用工具解决的不可能的问题,但是当前的构建工具的解决方案就是不让你这么做.
当然,对于像图像这样的资源,这是完全不同的 - 只要存在某种版本的资源,Android就可以正常使用它.
但是,您可以创建要在main源集中使用的类的特定于风格的实现.最简单的方法是简单地Foo在每个风格中加入一个,而不是Foo在main源集中提供.对于奖励积分,请在main源集中为这些实现创建一个接口,以确保特定于flavor的实现符合相同的接口,并且不会导致构建错误.
| 归档时间: |
|
| 查看次数: |
5078 次 |
| 最近记录: |