2017-06-21 46 views
0

爲了簡單起見,我的應用有兩種口味,稱爲flavoraflavorb產品口味和源層次

productFlavors { 
     flavora { 
      resValue "string", 'app_name', "App Name Flavor A" 
      applicationIdSuffix ".flavora" 
     } 
     flavorb { 
      resValue "string", 'app_name', "App Name Flavor B" 
      applicationIdSuffix ".flavorb" 
     } 
    } 

兩個我都想要的味道使用所有相同的佈局,所有相同的Java代碼,所有相同的資源,等等,除非我想flavoraflavorb使用不同的實現佈局文件flavor_dependent_layout.xml和Java FlavorDependentJavaClass類。

這是正確的方式做到這一點:

sourceSets { 
    main { 
     res.srcDirs = ['src/main/res'] 
     java.srcDirs = ['src/main/java'] 
    } 
    flavora { 
     res.srcDirs = ['src/flavora/res', 'src/main/res'] 
     java.srcDirs = ['src/flavora/java', 'src/main/java'] 
    } 
    flavorb { 
     res.srcDirs = ['src/flavorb/res', 'src/main/res'] 
     java.srcDirs = ['src/flavorb/java', 'src/main/java'] 
    } 
} 

然後我剛剛創建必要的文件夾放置相應的文件,它會所有的工作從那裏自然?它是如何知道我已經包含了這兩種口味的課程,以防我嘗試執行一種方法,例如它只存在一種口味?

(?還有,我必須明確提到資產文件夾,因爲我有`/ src目錄/主/資產,以及)

回答

1

這是正確的方式做到這一點:

就在那裏創建src/flavora/res/src/flavora/java/src/flavorb/res/src/flavorb/java/,並把東西。他們會自動將添加到適當的構建路徑。您無需調整srcDirs

它是如何知道我已經包含了兩種口味的類,以防我嘗試執行一種方法,並且它只存在一種口味,例如?

這是一個構建錯誤。在Java代碼中,如果你想擁有它的口味:

  • 同一個類可以不從main引用main
  • 任何存在有兩種flavoraflavorb

存在所以,例如,如果您有AdStrategy類別src/flavora/java/內某處和src/flavorb/java/裏面的某處,您不會AdStrategysrc/main/java/。並且在AdStrategy(構造函數,方法等)中引用的任何東西都必須存在於flavoraflavorbAdStrategy的實現中。在構建時,當您構建flavora時,將自動使用樹木src/main/java/src/flavora/java/,無論您在main中引用的內容是否需要解析(同樣適用於flavorb構建)。