我遵循docs指令,也有类似的SO答案,但是当我尝试构建和运行时,我仍然会为ClassA.java出现重复的类错误。
我有主要源集中的两种风格使用的类,以及不同风格之间的不同impl,免费或专业源集(不是主要)中使用的类。
任何建议???
项目目录结构:
project/
|
|---src/
|---free/
| |
| |---java/
| | |---com.abc
| | |---innerpkg
| | |-----classA.java
| |---res/
| |---AndroidManifest.xml
|
|---main
| |
| |---java/
| | |---com.abc
| | |-----classC.java
| | |-----classD.java
| |---res/
| | |---drawable/
| | |---layout/
| | |---values/
| |
| |---AndroidManifest.xml
|
|---pro/
| |
| |---java/
| | |---com.abc
| | |---innerpkg
| | |-----classA.java
| |---res/
| |---AndroidManifest.xml
Gradle文件:
...
android {
...
flavorDimensions "flavor" // changes to one dimension instead of: flavorDimensions "free","pro"
productFlavors {
free {
dimension "flavor"
applicationId "com.abc"
signingConfig signingConfigs.configFree
}
pro {
dimension "flavor"
applicationId "com.abc.pro"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0.0"
signingConfig signingConfigs.configPro
}
}
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDir "src/main/jniLibs"
java.srcDirs = ['src/main/java']
}
free {
java.srcDirs = ['src/main/java', 'src/free/java']
manifest.srcFile "src/free/AndroidManifest.xml"
}
pro {
java.srcDirs = ['src/main/java', 'src/pro/java']
manifest.srcFile "src/pro/AndroidManifest.xml"
}
}
}
答案 0 :(得分:2)
问题在于flavorDimensions
,一旦我为两种口味设置了一个维度,我可以在每个相应的源集中放置相同的文件名。
然后我只需要将构建Variant更改为我想要处理它的那个。
我浪费了几个小时......
希望这可能会为那些失去时间的人节省费用
答案 1 :(得分:0)
您可以拥有一个通用模块,其中包含在两个模块/ flavor中使用的公共类。这样可以避免这个问题。
答案 2 :(得分:0)
您可以在主src目录和产品风格中创建一个抽象类,实现此类。 现在,您将拥有相同类的不同实现