Android'de Build Types ve Product Flavors Kullanımı


Görsel Referansı


Herkese merhaba, bu yazıda sizlere Android'de Build Types ve Product Flavors kullanımı hakkındaki detaylardan ve aralarındaki farklardan bahsedeceğim. Her iki yapı da Android uygulamaları oluştururken bizlere birçok kolaylık sağlıyor. Uygulamaların ikonlarından üretim sürümlerine, geliştirme moduna özel konfigürasyonlardan uygulamanın farklı varyantlarını oluşturmaya kadar birçok noktada fayda sağlayabiliyoruz.


Build Types


Build Types; uygulamaları geliştirirken, derlerken ve imzalı versiyon hazırlarken, Gradle'ın kullandığı bazı özellikleri düzenleyebilmemizi ve bizim kullanacağımız bazı konfigürasyonları daha kolay yönetmemizi sağlar. Yeni oluşturulan Android projelerinde, sistem default olarak iki adet Build Types tanımlar. Bunlardan birisi debug, diğeri de release modudur.


Debug modu, yeni oluşturulan projede konfigürasyonda açıkça gösterilmez. Ama hata ayıklama araçlarını içerir ve debug anahtarı ile imzalanır. Daha çok geliştirme esnasında kullanılır. Test edilecek uygulamayı doğrudan test cihazına derlememize izin verir.


Release modu ise, ProGuard ayarlarını uygulayıp standart güvenlik önlemi almamıza aracı olur. Test cihazlarına direkt olarak derlenmez, uygulamaya özel anahtar ile imzalanıp derlenmeye ihtiyaç duyar.


Aşağıdaki örnekteki gibi, yeni bir tip de ekleyebiliriz. Tiplere göre farklı versiyon eklentisi ya da tamamen özel değişkenler ekleyebiliriz. Geliştirme esnasında bu farklı tipleri kullanabilmek için kısayol olarak Android Studio'da sol altta bulunan Build Variants sekmesinden tipleri kolayca değiştirebilirsiniz. Aşağıdaki kod örneğinde gördüğünüz MODE değişkeni, kod ilk kez derlendikten sonra BuildConfig.java adında otomatik yaratılan bir sınıfta seçilen tipe göre güncellenecektir. Kod blokları içinde statik olan bu değişkenlere kolayca erişebilirsiniz. Aynı şekilde ortam değişikliklerinizi de burada uygulayabilirsiniz. Bu gibi esneklikler sayesinde, geliştirme moduna özel konfigürasyonlarla daha güvenli ve esnek bir geliştirme ortamı kurabilirsiniz.


buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "String", "MODE", '"PROD"'
        buildConfigField "String", "CLIENT_ID", '"PROD_CLIENT_ID"'
        buildConfigField "String", "CLIENT_SECRET", '"PROD_CLIENT_SECRET"'
        buildConfigField "String", "BASE_URL", '"https://produrl.com"'
    }
    debug{
        versionNameSuffix "-debug"
        buildConfigField "String", "MODE", '"DEBUG"'
        buildConfigField "String", "CLIENT_ID", '"DEBUG_CLIENT_ID"'
        buildConfigField "String", "CLIENT_SECRET", '"DEBUG_CLIENT_SECRET"'
        buildConfigField "String",