Чем отличаются build type, flavor и build variant?

Build Type используется, чтобы задать настройки сборки, например будет ли использоваться proguard и каким сертификатом подписывается apk. Самые часто используемые типы сборки: debug и release. Тип сборки задается параметром buildTypes в gradle-файле:

buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
minifyEnabled false
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}


Flavor используется для определения сборок приложения с разной функциональностью. Это могут быть платные фичи, различные таргет API, разные ресурсы. Задается параметром productFlavors в gradle-файле:

productFlavors {
free {
dimension "version"
applicationId "ru.itsobes.flavors.free"
resValue "string", "flavored_app_name", "Free It Sobes App"
}

paid {
dimension "version"
applicationId "ru.itsobes.flavors.paid"
resValue "string", "flavored_app_name", "Paid It Sobes App"
}
}


Build Variant – это комбинация build type и flavor. Для описанных выше build type и flavor создаются четыре build variant: freeDebug, freeRelease, paidDebug, paidRelease.