多个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