2017-07-18 30 views
5

release yapı türünden farklı olarak debug yapı türü için farklı bir versionCode olmasını istiyorum. Bu, Gradle Android eklentisi v2.3.2'de (Gradle v3.3) aşağıdaki yapılandırmayı kullanarak çalışırdı, ancak şimdi v3.0.0-alpha5'de (Gradle v4.1-milestone-1) hiçbir etkisi olmaz. En yeni Gradle eklentisinde, variant.mergedFlavor.versionCode özniteliğini yok sayan şeylerle ilgili herhangi bir fikir var mı?Gradle 3.0.0 alpha variant çıkış sorunu

migration guide kaynaktan
buildTypes {  
     debug { 
       applicationIdSuffix ".debug" 
       versionNameSuffix "-" + buildTime() 
       android.applicationVariants.all { variant -> 
        if (variant.buildType.name != buildTypes.debug.name) return 
        variant.outputs.all { 
         outputFileName = "${archivesBaseName}-${variant.name}-v${variant.versionName}-signed.apk" 
         variant.mergedFlavor.versionCode = Integer.parseInt(buildTimeSmall()) 
        } 
       } 
      } 
} 

cevap

2

:

varyant çıktılar işlemek için Varyant API kullanarak yeni bir eklenti ile kırılır. aşağıda gösterildiği gibi hala bu tür yapı süre içinde APK adını değiştirmek gibi basit görevler için çalışır:

// If you use each() to iterate through the variant objects, 
// you need to start using all(). That's because each() iterates 
// through only the objects that already exist during configuration time— 
// but those object don't exist at configuration time with the new model. 
// However, all() adapts to the new model by picking up object as they are 
// added during execution. 
android.applicationVariants.all { variant -> 
    variant.outputs.all { 
     outputFileName = "${variant.name}-${variant.versionName}.apk" 
    } 
} 

Ancak outputfile nesneleri erişim gerektirir daha karmaşık görevler artık çalışır. Bunun nedeni, yapılandırma aşamasında varyantlara özgü görevlerin artık yaratılmamasıdır. Bu, tüm çıktılarını ön tarafa bilmeyen eklenti ile sonuçlanır, ancak aynı zamanda daha hızlı yapılandırma süreleri anlamına gelir. Alternatif olarak, benzer işlevleri sağlamak için yeni API'leri tanıtacağız. Jerome, referans için

output.setVersionCodeOverride(Integer.parseInt(buildTimeSmall())) 

Teşekkür: herkes bir çözüm arıyorsanız eğer 3.0 yayınlanmadan önce geçici bir çözüm olarak

+0

Bunu okumuştum ama Çıkışın kendisinde değil, outputFile'daki değişikliklerden bahsederler. Yoksa bir şey mi özlüyorum? –

+1

'Varyant çıktılarını kullanmak için Variant API'sini kullanarak ...' temel olarak bu kodu kodunuzda kullanacaksınız: 'variant.outputs.all {...}' – azizbekian

+1

Kötüyüm, oradan da okuyun .. Umarım Gelecekteki sürümlerde geri bazı özellikler için destek ekleyecekler. –