我的应用程序版本很少:普通版本,比如mainapp
,每个客户都有一些特定的版本,比如custom1
,custom2
,custom3
。
我希望所有customX口味都有基调。
我试图这样做:
创建项目结构:
app\src\main
app\src\mainapp
app\src\commonflavor
app\src\custom3
并配置:
productFlavors {
mainapp {
}
custom1 {
}
custom2 {
}
custom3 {
}
}
sourceSets {
custom1 {
java.srcDirs = ['src/commonflavor/java']
}
custom2 {
java.srcDirs = ['src/commonflavor/java']
}
custom3 {
java.srcDirs = ['src/commonflavor/java', 'src/custom3/java']
}
}
在commonflavor
中,我为所有customX风格添加了常见的java类,比如MainActivity.java
和SecondActivity.java
。但在custom3
中,我需要单独SecondActivity.java
。
在这种情况下,error: duplicate class: SecondActivity
和src/commonflavor/java
出现了错误src/custom3/java
。
现在我已经使用class dupllication解决了这个问题:
sourceSets {
custom1 {
java.srcDirs = ['src/commonflavor/java']
}
custom2 {
java.srcDirs = ['src/commonflavor/java']
}
custom3 {
java.srcDirs = ['src/custom3/java']
}
}
我已从srcDirs复制src/commonflavor/java
并将MainActivity.java
复制到custom3
。问题是我在MainActivity.java
和src/commonflavor/java
src/custom3/java
文件的克隆
如何在没有代码重复的情况下解决这种情况?
答案 0 :(得分:2)
我创建的最佳解决方案是在app \ src \ main中编写所有类,并在需要的地方添加:
if(BuildConfig.FLAVOR.equals("mainapp")) {
// mainapp code
} else {
// coomon flavor code
}