2015-11-24 20 views
6

Projemde lezzet boyutları kullanıyorum ve benim oluşturulan tatlar için applicationID ayarlamak için döngü için kullanıyoruz:Lezzet boyutlarını kullanırken Android applicationId ayarının doğru yolu nedir?

flavorDimensions "appname", "brand" 

productFlavors { 

    user { 
     dimension "appname" 
    } 

    installer { 
     dimension "appname" 
    } 

    branda { 
     dimension "brand" 
    } 

    brandb { 
     dimension "brand" 
    } 

    brandc { 
     dimension "brand" 
    } 

    brandd { 
     dimension "brand" 
    } 

} 

Bir Ben şu anda desteklemeyen olanlar filtre:

variantFilter { variant -> 
    def names = variant.flavors*.name 

    if (names.contains("installer") && (names.contains("brandc") || names.contains("brancd"))) { 
     variant.ignore = true 
    } 
} 

Sonra applicationID lezzet adını göre güncelleyin: iki soru var

applicationVariants.all { variant -> 
def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName() 
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor(); 

switch (flavorString) { 
/** 
* user 
*/ 
case "userBranda": 
    mergedFlavour.setApplicationId("com.mycompany.product.user.someName") 
    mergedFlavour.setVersionName("1.0.0") 
    break 
case "userBrandb": 
    mergedFlavour.setApplicationId("com.mycompany.product.user.b") 
    mergedFlavour.setVersionName("2.0.0") 
break 
case "userBrandc": 
    mergedFlavour.setApplicationId("com.mycompany.product.user.otherName") 
    mergedFlavour.setVersionName("1.5.0") 
    break 
case "userBrandd": 
    mergedFlavour.setApplicationId("com.mycompany.product.user.d") 
    mergedFlavour.setVersionName("1.0.1") 
    break 
/** 
* installer 
*/ 
case "installerBranda": 
    mergedFlavour.setApplicationId("com.mycompany.product.installer.marketingName") 
    mergedFlavour.setVersionName("1.0.0") 
    break 
case "installerBrandb": 
    mergedFlavour.setApplicationId("com.mycompany.product.installer.b") 
    mergedFlavour.setVersionName("1.0.0") 
    break 
default: 
    throw new GradleException("flavor ${flavorString} is not supported, please configure it first...") 
    break 
} 

:

- Bunu yapmanın doğru yolu bu mu? Android eklentisi flavorDimensions kullanarak applicationId'yi yapılandırmanın bir yolunu desteklemiyor mu?

- Burada söz Zaten içeride tanımlanan uygulama paketi olan bir google-services.json kullanıyorsanız örneğin dışında, vakaların çoğunda çalışır yapılandırması. Basit productFlavor kullanım için yapılandırma normalde çalışır, ama lezzet boyutlarını kullanmak durumunda gradle hep şikayet ediyor:
:app:processUserBrandaDebugGoogleServices 
No matching client found for package name 'com.mycompany.product' 

Temelde 'com.mycompany.product' AndroidManifest varsayılan olarak tanımlanır paketidir. xml. Ben

app/build/intermediates/manifests/full/userBranda/debug/AndroidManifest.xml 

bakarsanız ben paket başarı ile değiştirildi görebiliriz.

Bununla ilgili sonuca varabildiklerim, yalnızca lezzet boyutlarında, bir şekilde taslakların yalnızca processUserBrandaDebugGoogleServices'ten sonra birleştirilmesidir. Bu, bu noktada, bildiride tanımlanan paketin varsayılan değer olduğu anlamına gelir.

Aynı sorun yaşayan herkes burada mı? Bu sorun nasıl çözülür? Bu bir android gradle eklenti hatası mı? Kısacası

+0

Bkz http://tools.android.com/tech- Daha fazla bilgi için docs/new-build-system/applicationid-vs-packagename. –

+0

Dokümantasyon, flavorDimensions için applicationId ayarı hakkında hiçbir şey söylemiyor. –

+0

Yani http://stackoverflow.com/a/26585241/4310905 hemen hemen aynıdır, bu yüzden kodunuz iyi görünüyor. –

cevap

4

, anahtar kelime, bu gibi applicationIdSuffix geçerli:

productFlavors { 
    pro { 
     applicationIdSuffix = ".pro" 
    } 
    free { 
     applicationIdSuffix = ".free" 
    } 
} 

buildTypes { 
    debug { 
     applicationIdSuffix ".debug" 
    } 
} 

Daha güçlü, böyle yapabilirsiniz:

applicationVariants.all { variant -> 
    def flavorData = rootProject.ext[variant.buildType.name] 

    variant.mergedFlavor.setApplicationId(flavorData.applicationId) 
    //do other things 
} 
İlgili konular