在Android Studio中使用Gradle构建变体

时间:2014-01-29 16:25:28

标签: java android android-gradle build.gradle

对于使用Gradle的Android Studio中的风味,我有一个问题... 请考虑以下事项:

你有3种口味的构建; Flavor1,Flavor2和Flavor3。

所有3种口味都依赖于同一个文件,为简单起见,将其称为MainActivity.java。 此外,所有3种风格都有自己定义的常量文件,称之为Constants.java。

除了Constants.java之外,Flavor1和Flavor2依赖于相同的源代码。也就是说,Flavor1和Flavor2都使用main,MainActivity.java和另一个文件中的以下文件,为简单起见,将其命名为AnotherActivity.java。

现在,Flavor3使用MainActivity.java,但另一方面需要一些额外的自定义和对AnotherActivity.java的一些更改。

File Structure:
src
-main
--java
---MainActivity.java
---AnotherActivity.java

-Flavor1
--java
---Constants.java
-Flavor2
--java
---Constants.java
-Flavor3
--java
---Constants.java
---AnotherActivity.java

有没有办法在不使用Gradle在Android Studio中获取重复的类文件错误的情况下完成此类构建依赖项?

谢谢!

最诚挚的问候, 克里斯托弗史蒂文

2 个答案:

答案 0 :(得分:5)

我发现只有资源以这种方式合并。源文件合并到单个构建路径中。您需要像使用Constants.java一样将AnotherActivity.java复制到每个flavor。期待重构您的源代码以减少重复是您可以做的最好的。您可以使用src / main / java中的AbstractAnotherActivity.java完成此操作,其他人可以扩展。

您会注意到,当您在Android Studio中选择构建变体时,它将仅显示包视图中所选变体的来源。

答案 1 :(得分:0)

当使用Gradle风格(显然同名)时,类完全替换了另一个类。避免重用代码的最佳做法是在MainActivity中包含所有共享代码,这样就不会复制它(否则必须在多个位置进行更改)。引用AnotherActivity类中的任何其他代码/覆盖。