2017-12-03 56 views
0

我遵循docs指令,也是类似的答案,但是当我尝试构建和运行时,我仍然得到ClassA.java的重复类错误。产品风味重复类错误

我有两种风格的主要源集合和每个类有不同的风味,在自由或专业源集(不主要)中有不同风味的类。

任何建议???

项目目录结构:

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 

摇篮文件:

... 
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

你可以有共同的一个模块,其中包含两个模块/香精使用的通用类。这将避免这个问题。

+0

这将如何帮助?我需要同一个班级的不同版本。 另外我对“共享”类没有问题,我只是将它们放在主源集 –

0

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

+0

谢谢,但这不会完成我想要做的,我需要相同的类名称,所以不同的风味将使用相同的但每种味道都会以稍微不同的方式使用它。 另外它清楚地在文档(和其他答案)中说:“你可以让每个构建类型定义它自己的文件版本,而不是将其包含在主/源集合中”。 我希望它能够以这种方式工作(它是如何被假设为impl的),而不是一些解决方法 –

+0

当你将有一个抽象类时,它将在所有的风格中很常见。具体的实现方法可以使它根据需要做不同的工作。 我不认为这是一个解决方法,这是做到这一点的方法之一。 或者可能是我误解了这个问题 – Rinav

1

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

然后我只需要将构建变体更改为我想要处理的变体。

我浪费这几个小时...

但愿这可能挽救别人那些失去小时

相关问题