Android Studio - комбинация productFlavor для установки версии

В моем build.gradleЯ определяю 2 разных вкуса:

//list flavorDimensions in override priority order
flavorDimensions 'flavor', 'platform'

//assign each productFlavor a corresponding flavorDimension
productFlavors {
    flavor1 {
        dimension 'flavor'
        applicationId "com.flavor1"
    }
    flavor2 {
        dimension 'flavor'
        applicationId "com.flavor2"
    }
    mobile {
        dimension 'platform'
        applicationIdSuffix '.mobile'
        minSdkVersion 22
    }
    tv {
        dimension 'platform'
        applicationIdSuffix '.tv'
        minSdkVersion 21
    }
}

Я хотел бы иметь возможность установить versionCode а также versionName на основе комбинаций, поэтому каждое из следующих значений может иметь собственную информацию о версии:

  • flavor1Mobile
    • versionName = 1.0.0
    • versionCode = 3
  • flavor1Tv
    • versionName = 1.0.2
    • versionCode = 5
  • flavor2Mobile
    • versionName = 3.0.0
    • versionCode = 10
  • flavor2Tv
    • versionName = 2.0.0
    • versionCode = 4

1 ответ

Решение

Был в состоянии построить решение, объединив решения из:

  • /questions/19056726/put-k-kodu-na-vkus-v-android-gradle/19056738#19056738
  • https://developer.android.com/studio/build/gradle-tips

    project.ext{
    
        flavor1Mobile_versionName = "1.0.0"
        flavor1Mobile_versionCode = 3
    
        flavor1Tv_versionName = "1.0.2"
        flavor1Tv_versionCode = 5
    
    
        flavor2Mobile_versionName = "3.0.0"
        flavor2Mobile_versionCode = 10
    
        flavor2Tv_versionName = "2.0.0"
        flavor2Tv_versionCode = 4
    
    }
    
    
    project.android.applicationVariants.all {variant ->
        def versionName = project.ext."${variant.flavorName}_versionName"
        def versionCode = project.ext."${variant.flavorName}_versionCode"
        variant.outputs.each { output ->
            output.versionNameOverride = versionName
            output.versionCodeOverride = versionCode
        }
    }
    

У меня та же проблема, и я смог решить ее немного по-другому, но в зависимости от обстоятельств будущих посетителей этой страницы, это может помочь.

В вашем глобальном файле gradle.properties вы можете определить свои разные версии:

flavor1_versionName=1.0.0
flavor2_versionName=1.2.3
mobile_versionName=1.0.1
tv_versionName=1.0.2

Затем вы можете просто переопределить параметр versionName в вашем файле build.gradle(:app), в который вы добавляете свой productFlavors:

productFlavors {
    flavor1 {
        dimension 'flavor'
        applicationId "com.flavor1"
        versionName = flavor1_versionName;
    }
    flavor2 {
        dimension 'flavor'
        applicationId "com.flavor2"
        versionName = flavor2_versionName;
    }
    mobile {
        dimension 'platform'
        applicationIdSuffix '.mobile'
        minSdkVersion 22
        versionName = mobile_versionName;
    }
    tv {
        dimension 'platform'
        applicationIdSuffix '.tv'
        minSdkVersion 21
        versionName = tv_versionName;
    }
}

В блоке defaultConfig того же файла build.gradle вы можете сказать:

versionName version
project.version version