在我們的項(xiàng)目里没卸,一般有多個flavor,但是會有這種情況沪停,flavorOne煤辨、flavorTwo裳涛、flavorThree有相同的ClassCommon,然后flavorFour也有這個ClassCommon众辨,首先這個ClassCommon不能放到main這個Flavor里端三,否則會報類重復(fù),之前我的解決辦法很low鹃彻,后來發(fā)現(xiàn)這樣一個回答
https://stackoverflow.com/questions/28563632/common-code-for-different-android-flavors/30548238#30548238
和我的問題一樣郊闯,簡明精要的總結(jié)一下是這樣的:
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。
現(xiàn)在我們所需要做的就是將ClassCommon放到common這個Flavor里蛛株,然后設(shè)置sourceSets指定哪些Flavor需要添加這個源碼目錄团赁。再在flavorFour里在自己的源代碼下添加自己有特殊改動的的ClassCommon
所以最終的項(xiàng)目結(jié)構(gòu)看起來就像這樣
+ 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