2017-12-03 122 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,一旦我爲這兩種口味設置單一維度,我可以在每個相應的源集中放置相同的文件名。

然後我只需要將構建變體更改爲我想要處理的變體。

我浪費這幾個小時...

但願這可能挽救別人那些失去小時