Sparround

Gradle, build variant-lər, signing və release

Gradle — build sistemi: asılılıqlar, compile, R8, imzalama, paketləmə. Bilməli olduğun anlayışlar:

  • Build type — debug/release: optimallaşdırma, imza, debuggable fərqləri
  • Product flavor — eyni kodun variantları: dev/staging/prod (fərqli API URL-ləri), bəzən retail/corporate. Build type × flavor = build variant (prodRelease)
  • buildConfigField / resValue — variant üzrə konfiqurasiya (API URL); sirlər buraya qoyulmur — BuildConfig APK-dan oxunur
  • Version catalog (libs.versions.toml) — asılılıqların mərkəzi idarəsi

İmzalama: APK/AAB release keystore ilə imzalanır — itirsən, Play-də yeniləmə çıxara bilməzsən (Play App Signing bunu yumşaldır: Google app signing key-i saxlayır, sən upload key işlədirsən — itəndə reset mümkündür).

AAB (Android App Bundle) — Play-ə yüklənən format: Google hər cihaz üçün optimallaşdırılmış APK-lar (dil, screen density, ABI üzrə split) generasiya edir → kiçik yükləmə ölçüsü. Play-də yeni tətbiqlər üçün məcburidir.

Release axını: internal testing → closed/open testing → staged rollout (5% → 20% → 100%, vitals izlənərək) → tam release. Bank əlavəsi: hər release-də security checklist + penetration test dövrləri.

kotlin
android {
    flavorDimensions += "env"
    productFlavors {
        create("dev") {
            dimension = "env"
            applicationIdSuffix = ".dev"          // eyni cihazda yan-yana
            buildConfigField("String", "API_BASE", "\"https://api-dev.bank.example/\"")
        }
        create("prod") {
            dimension = "env"
            buildConfigField("String", "API_BASE", "\"https://api.bank.example/\"")
        }
    }
    buildTypes {
        release {
            isMinifyEnabled = true
            signingConfig = signingConfigs.getByName("release")
            // keystore parolları CI secret-lərindən gəlir,
            // heç vaxt repo-da saxlanmır
        }
    }
}

Flavor-lar və variant konfiqurasiyası (build.gradle.kts)

CI/CD sualına hazırlıq: tipik pipeline — PR: lint + detekt + unit testlər; merge: assemble + integration testlər; release tag: AAB build (imzalanma CI secret-ləri ilə) → Play internal track-ə avtomatik yükləmə → QA təsdiqi → staged rollout. Alətlər: GitHub Actions/GitLab CI + Gradle Play Publisher/fastlane. "Rollback necə olur?" — Android-də əvvəlki versiyaya qayıtmaq yoxdur: halt rollout + hotfix irəli, buna görə staged rollout + feature flag-lər kritikdir.

🛠 Tapşırıq

Build konfiqurasiyası ilə əl işi:

  • dev/prod flavor-ları əlavə et: fərqli API_BASE, applicationIdSuffix ilə hər ikisini eyni cihaza quraşdır.
  • Release variant üçün imzalama konfiqurasiyası qur (test keystore ilə) və AAB yığ (bundleProdRelease).
  • mapping.txt-i tap və nə üçün lazım olduğunu bir cümlə ilə yaz.

Bitdi sayılır: cihazda iki nüsxə yanaşı işləyirsə və AAB uğurla yığılıbsa.

📚 Mənbələr və sənədlər