2014-06-19 19 views
2

我有Gradle Android項目,將用於多個客戶。它也會有免費和付費版本。我意識到可以通過使用flavorDimensions來實現。但問題是,我想要一個方法來根據選定的風味生成包名稱。動態生成多種配置的包名稱

flavorDimensions 'branding', 'version' 
productFlavors { 
    free { 
     flavorDimension 'version' 
    } 
    paid{ 
     flavorDimension 'version' 
    } 
    customer1 { 
     flavorDimension 'branding' 
    } 
    customer2 { 
     flavorDimension 'branding' 
    } 
} 

// pseudocode 
def getGeneratePackageName() { 
    if (customer1 && free) { 
     return 'com.customer1.free' 
    } 
    if (customer2 && free) { 
     return 'com.customer2.free' 
    } 
    if (customer1 && paid) { 
     return 'com.customer1.paid' 
    } 
    if (customer2 && paid) { 
     return 'com.customer2.paid' 
    } 
} 

我想知道什麼時候需要調用此方法以及需要設置什麼變量?

回答

3

想通了如何實現這一點。下面的Groovy代碼可以靈活地生成包名稱。

buildTypes { 
    applicationVariants.all { variant -> 

     def projectFlavorNames = [] 

     variant.productFlavors.each() { flavor -> 
      projectFlavorNames.add(flavor.name) 
     } 

     project.logger.debug('Application variant ' + variant.name + '. Flavor names list: ' + projectFlavorNames) 

     if (projectFlavorNames.contains('customer1') && projectFlavorNames.contains('variant1')) { 
      variant.mergedFlavor.packageName = 'com.customer1.variant1' 
     } else if (projectFlavorNames.contains('customer2') && projectFlavorNames.contains('variant2')) { 
      variant.mergedFlavor.packageName = 'com.customer2.variant2' 
     } // else use standard package name 

     project.logger.debug('Using project name: ' + variant.packageName) 
    } 

    // ... 

} 
+0

注意:這已稍微改變。而不是'variant.mergedFlavor.packageName',你現在需要'variant.mergedFlavor.applicationId' – Grimmace