تكرار السؤال: …
الإجابة المختصرة
الـ Build Variant هو حاصل الضرب التبادلي بين كل Product Flavor (ميزات التطبيق) وكل Build Type (إعدادات البناء كـ debug و release).
الشرح
تحدد الـ Build Types (مثل debug و release) خيارات التوقيع والتشويش عبر R8 والـ debuggable. بينما تحدد الـ Product Flavors (مثل demo و full، أو dev و staging و prod) تخصيصات المنتج كـ applicationId ومصادر الموارد وعناوين الـ API الأساسية. دمج flavor (free) مع type (release) ينتج الـ Variant النهائي: freeRelease.
مثال بالكود
android {
buildTypes {
debug {
applicationIdSuffix = ".debug"
isMinifyEnabled = false
}
release {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
flavorDimensions += "tier"
productFlavors {
create("free") {
dimension = "tier"
applicationIdSuffix = ".free"
}
create("paid") {
dimension = "tier"
}
}
}
// Resulting variants: freeDebug, freeRelease, paidDebug, paidReleaseأخطاء شائعة
- نسيان تحديد flavorDimensions عند تعريف أكثر من Product Flavor مما يسبب فشل البناء.
- تكرار ملفات الموارد كاملة داخل كل flavor بدلاً من مشاركة الملفات المشتركة في مجلد src/main.