产品风味重复类错误

时间:2017-12-03 09:30:17

标签: android android-productflavors

我遵循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"
        }
    }

}

3 个答案:

答案 0 :(得分:2)

问题在于flavorDimensions,一旦我为两种口味设置了一个维度,我可以在每个相应的源集中放置相同的文件名。

然后我只需要将构建Variant更改为我想要处理它的那个。

我浪费了几个小时......

希望这可能会为那些失去时间的人节省费用

答案 1 :(得分:0)

您可以拥有一个通用模块,其中包含在两个模块/ flavor中使用的公共类。这样可以避免这个问题。

答案 2 :(得分:0)

您可以在主src目录和产品风格中创建一个抽象类,实现此类。 现在,您将拥有相同类的不同实现