Build Types, Product Flavors ve Build Variants Yapıları Nelerdir?

Build Types, Product Flavors ve Build Variants. Bu üç kavramı birbirine karıştırmayalım :)

Feyza Ürkut
Huawei Developers - Türkiye
5 min readMar 12, 2024

--

Photo by Jacob Mejicanos on Unsplash

Giriş

Herkese merhaba🌺 Bu makalede sizlere Build Types ve Product Flavors’ın farkları, avantajları ile Build Variants kavramını çeşitli kullanım senaryoları üzerinden anlatacağım.

Bu araçlar, uygulamanızı hedef kitlenize göre özelleştirmenize ve yönetmenize olanak tanır. Bu sayede örneğin aynı cihaz üzerinde farklı variantlar kullanarak pek çok farklı sürümünü diğer sürümleri kaldırmadan kullanabiliyor oluruz.

Bu üç kavramı bu makaleyi yazmaya karar verdiğimde ve biraz daha araştırma yapıp proje üstünde denediğimde tam olarak anladım, sizin için de faydalı olacağına eminim 😃

Şimdiden keyifli okumalarr, gelin başlayalım!

The Wind Rises ✨

🌻 Build Type

  • Her Build Type, Gradle dosyasında tanımlanır ve yönetilir.
  • Derleme işlemi sırasında kullanılacak kaynak, manifest dosyası, proguard kuralları ve diğer yapılandırmalar belirlenir.
  • Her bir Build Type, farklı gereksinimleri karşılamak için değişen yapılandırmalara sahiptir.
  • Geliştirme sürecinin farklı aşamaları için optimize edilmiş derleme yapılandırmaları sağlar.

Build Types ile Kontrol Edebilecekleriniz:

Derleme ve Dağıtım Aşamaları:

  • Debug, Release ve Test gibi farklı derleme ve dağıtım senaryoları tanımlayabilirsiniz.
  • Hata ayıklama, üretim ve test ortamları için optimize edilmiş derleme yapılandırmaları sağlar.

Derleme Seviyesinde Optimizasyon:

  • Debug sürümü, hata ayıklama için ekstra bilgiler içerebilirken, Release sürümü optimize edilmiş ve hata ayıklama amacıyla gereksiz bilgileri kaldırır.

Build Prosesine İlişkin Ayarlar:

  • ProGuard kuralları, işaretleme ve diğer derleme süreci ayarları gibi yapılandırmaları belirleyebilirsiniz.

Debug ve Release Uygulama Davranışları:

  • Debug sürümü, belirli hata ayıklama özelliklerini etkinleştirebilir veya geliştirme için belirli yapılandırmaları kullanabilir.
  • Release sürümü, kullanıcılar için optimize edilmiş bir deneyim sunmak için ekstra güvenlik önlemleri veya performans iyileştirmeleri içerebilir.

🌻 Product Flavor

  • Product flavor, uygulamanızın farklı özelliklerini veya yapılandırmalarını temsil eder.
  • Farklı product flavor’lar, aynı temel kod tabanı üzerine özelleştirilmiş sürümler oluşturmanıza olanak tanır. Örneğin, ücretsiz ve ücretli sürümleri, farklı pazarlara veya hedef kitlere özelleştirilmiş sürümleri yönetmek için kullanabilirsiniz.
  • Genellikle, dil, renk teması, API Key vb. gibi özellikler product flavor’lara özgü olarak ayarlanabilir.
  • Her bir flavor, genellikle farklı kaynak dosyalarını (resimler, metinler), farklı kod parçalarını veya farklı bağımlılıkları içerebilir.

Product Flavors ile Kontrol Edebilecekleriniz:

Farklı Pazar Segmentleri için Özelleştirme:

  • Ücretsiz ve premium sürümler oluşturabilir, her birine farklı özellikler veya hizmetler ekleyebilirsiniz.
  • Farklı pazar segmentlerine veya kullanıcı gruplarına özgü uygulama sürümleri oluşturabilirsiniz.

Yerelleştirme ve Bölgesel Ayarlar:

  • Farklı dil seçenekleri veya bölgesel ayarlar için farklı varyasyonlar oluşturabilirsiniz.
  • Her bir Product Flavor, yerelleştirilmiş metinler, görseller ve diğer yerelleştirme gereksinimlerini içerebilir.

Marka Farklılıkları ve Özellikler:

  • Farklı markalara veya iş ortaklarına yönelik özel uygulama sürümleri oluşturabilirsiniz.
  • Her bir marka veya iş ortağı için özelleştirilmiş temalar, logo ve diğer marka özellikleri sağlayabilirsiniz.

Donanım ve Ekran Farklılıkları:

  • Farklı cihaz tipleri veya ekran boyutları için özelleştirilmiş sürümler oluşturabilirsiniz.
  • Her bir Product Flavor, farklı ekran çözünürlükleri veya donanım özelliklerine uygun düzenlemeler içerebilir.

A/B Testleri:

  • Farklı özellikler veya tasarım varyasyonlarını test etmek için farklı sürümler oluşturabilirsiniz. Her bir Product Flavor, farklı test gruplarına yönlendirilerek kullanıcı deneyimini iyileştirmek için veri toplamanıza olanak tanır.

Burada Build Types ve Product Flavors kavramlarının benzerlik ve farklılıklarını bulabilirsiniz.

Farklar:

  • Build Types, derleme ve dağıtma amacını tanımlar, Product Flavors ise uygulamanın farklı varyasyonlarını belirler.
  • Build Types, Debug, Release ve Test gibi belirli amaçlar için önceden tanımlanmıştır; Product Flavors ise uygulamanın çeşitli varyasyonlarını tanımlamanıza olanak tanır.
  • Build Types, genellikle geliştirme sürecinin farklı aşamaları için kullanılırken, Product Flavors, farklı pazar segmentlerine, cihaz türlerine veya iş gereksinimlerine yönelik farklı sürümler oluşturmak için kullanılır.

Benzerlikler:

  • Hem Build Types hem de Product Flavors, farklı uygulama gereksinimlerini karşılamak için çeşitlilik sağlar.
  • Her ikisi de Gradle dosyasında tanımlanır ve yönetilir.
  • Hem Build Types hem de Product Flavors, derleme ve dağıtma süreçlerini yönetmek için kullanılır.

🌼 Build Variants

  • Build Type ve Product Flavor kombinasyonu Build Variant olarak bilinir. Build variants, uygulamanızın farklı derleme ve dağıtım seçeneklerini temsil eder.
  • Bir build variant, belirli bir build türünü (Debug veya Release) ve bir veya daha fazla product flavor’ı içerir.
  • Farklı kombinasyonlar oluşturmak için build variant’ları kullanabilirsiniz. Örneğin, “Debug” derlemesi için hem “free” hem de “premium” product flavor’ları oluşturabilirsiniz.
  • Derleme zamanında, belirli bir yapılandırmaya dayalı olarak farklı APK’ler oluşturulabilir. Örneğin, debug ve release buildleri, test ve canlı ortamlar için ayrı buildler.

🛠 Kullanılan Parametreler

applicationId, applicationIdSuffix, versionNameSuffix, dimension, buildConfigField gibi parametreler, uygulamanızın farklı yapılandırmalarını yönetmek, sürümlemek ve farklı özellik setlerini ayırt etmek için kullanılır. Bu, uygulamanızın farklı senaryolara göre esnek bir şekilde yapılandırılmasına olanak tanır.

  • applicationId: Bu, uygulamanın benzersiz kimliğidir ve genellikle bir ters alan adı olarak ifade edilir. Örneğin, “com.example.myapp”. Bu kimlik, uygulamayı diğer uygulamalardan ayırmak için kullanılır.
  • applicationIdSuffix: Bu, applicationId'nin sonuna eklenecek ek bir değerdir. Birden fazla uygulama yapılandırmasını desteklemek için kullanılabilir. Örneğin, farklı ülkelerdeki farklı sürümler için.
  • versionNameSuffix: Bu, uygulama sürüm numarasının (versionName) sonuna eklenecek ek bir değerdir. Farklı dağıtım türlerini (örneğin, beta veya alfa sürümleri) ayırt etmek için kullanılabilir.
  • dimension: Boyut, ürün varyantlarını (product variant) gruplamak için kullanılan bir etikettir. Örneğin, “flavor” (lezzet), “abi” (uyumlu kodlamalar), “size” (boyut) gibi.
  • buildConfigField: Bu, uygulama kodundan BuildConfig sınıfına özel alanlar eklemek için kullanılır. Örneğin, belirli bir yapılandırma veya sürüm numarası gibi bilgileri BuildConfig sınıfına eklemek için kullanılabilir.
  • flavorDimensions: Bu, farklı “lezzet”lerin (flavors) gruplandırılmasını sağlar. Örneğin, “pazar” (market) ve “ortam” (environment) gibi. productFlavors bloğunda kullanılır.

BuildConfig.java

Varsayılan olarak, BuildConfig.java her zaman her Android modülünde uygulamanızın oluşturulma zamanında(build time) oluşturulur ve DEBUG, APPLICATION_ID, BUILD_TYPE vb. değişkenlerle birlikte gelir.

Yukarıdaki kod parçasının uygulama build alındıktan sonra oluşan BuildConfig dosyasına etkisini aşağıda görüyorsunuz. API_KEY, BASE_URL gibi belirlediğimiz birçok parametreye uygulama içinden ulaşarak kodlarınızı istediğiniz gibi kontrol edebiliriz ✌

Çoklu Product Flavors’ları Flavor Dimensions ile Birleştirin

Kullanmak istediğiniz flavor boyutlarını(dimensions) belirtir. Boyutları listelediğiniz sıra, Gradle değişken kaynakları ve konfigürasyonları birleştirdiğinde, en yüksekten en düşüğe doğru önceliklerini belirler.
Gradle, lezzet boyutları arasındaki önceliği, flavorDimensions özelliğinin yanında görünme sırasına göre belirler; birinci boyut ikinciden daha yüksek önceliğe sahiptir ve bu böyle devam eder.

Aşağıdaki kod parçasında göreceğiniz gibi flavorDimensions ile store ve mode boyutlarının sırasını değiştirdiğimizde aktif build variant’larımızda değişiyor.

applicationIdSuffix Sırası: orijinal appId + productFlavors + buildTypes

Original order of dimensions
  • applicationId : com.feyzaurkut.musicplayer.hms.free.debug
flavorDimensions += [“mode”, “store”]
  • applicationId : com.feyzaurkut.musicplayer.free.hms.debug

Sonuç

Build Types ve Product Flavors, Android uygulamalarının yönetimini ve dağıtımını yönetmek için güçlü araçlardır. Build Types, derleme ve dağıtma süreçlerini tanımlarken, Product Flavors farklı pazar segmentleri veya kullanıcı grupları için farklı sürümler oluşturmanıza olanak tanır. Her iki kavramı doğru bir şekilde kullanmak, uygulamanızı daha esnek ve yönetilebilir hale getirecek ve kullanıcı deneyimini iyileştirecektir.

Yeni makalelerde görüşmek üzereee 😃🌺

Spirited Away ✨

Referanslar

--

--