gradle

多个Flavor有部分Flavor存在相同类时的解决办法

2018-04-19  本文已影响254人  o动感超人o

在我们的项目里,一般有多个flavor,但是会有这种情况,flavorOne、flavorTwo、flavorThree有相同的ClassCommon,然后flavorFour也有这个ClassCommon,首先这个ClassCommon不能放到main这个Flavor里,否则会报类重复,之前我的解决办法很low,后来发现这样一个回答
https://stackoverflow.com/questions/28563632/common-code-for-different-android-flavors/30548238#30548238
和我的问题一样,简明精要的总结一下是这样的:

android {
    ...
    productFlavors {
        flavorOne {
            ...
        }
        flavorTwo {
            ...
        }
        flavorThree {
            ...
        }
        flavorFour {
            ...
        }
    }
    sourceSets {
        flavorOne.java.srcDir 'src/common/java'
        flavorTwo.java.srcDir 'src/common/java'
        flavorThree.java.srcDir 'src/common/java'
    }
}

注意使用flavorX.java.srcDir(而不是srcDirs)将另一个Java源目录添加到自己的源码目录中 src/flavorX/java。

现在我们所需要做的就是将ClassCommon放到common这个Flavor里,然后设置sourceSets指定哪些Flavor需要添加这个源码目录。再在flavorFour里在自己的源代码下添加自己有特殊改动的的ClassCommon

所以最终的项目结构看起来就像这样

+ App // module
|- src
   |- common // shared srcDir
      |- java
       |- path/to/pkg
         |- ClassCommon.java // inherited by flavors 1, 2, 3
   + flavorOne
   + flavorTwo
   + flavorThree
   + flavorFour
      |- java
       |- path/to/pkg
         |- ClassCommon.java // per-flavor activity class
      |- res
         |- layout
            |- activity_customization.xml // overrides src/main/res/layout
   |- main
      + java
      |- res
         |- layout
            |- activity_customization.xml // inherited by flavors 1, 2, 3
上一篇 下一篇

猜你喜欢

热点阅读