Yapı tipleri neden ürün lezzetlerinden farklıdır?


173

Önsöz: Bu, bir Android uygulamasında yapı türlerinin ve ürün tatlarının nasıl kullanılacağı hakkında bir soru değildir. İlgili temel kavramları anlıyorum. Bu soru, bir yapı türünde hangi yapılandırmanın belirtilmesi gerektiğini, bir ürün aromasında hangi yapılandırmanın belirtilmesi gerektiğini ve herhangi bir ayrımın gerçekten gerekli olup olmadığını anlamaya çalışmakla ilgilidir.

Bu hafta Android uygulamaları için sürüm yapılandırması hakkında daha fazla bilgi edindim. Başlangıçta, ürün lezzetlerine karşı yapı türlerinde iyi bir ele sahip olduğumu düşündüm, ancak belgelere ne kadar derin girdiğimde, ikisi arasındaki ayrımın benim için net olmadığını fark ettim.

İyi tanımlanmış bir hiyerarşi olduğu için (yapı türlerinde belirtilen özelliklerin, ürün aromalarında belirtilenlerden öncelikli olduğu için), yapı türleri ile ürün aromaları arasında neden bir ayrım yapılması gerektiğini anlamıyorum. Tüm özellikleri ve yöntemleri ürün lezzet DSL nesnesiyle birleştirmek ve daha sonra yapı tipini (varsayılan) lezzet boyutu olarak ele almak daha iyi olmaz mıydı?

Karışıklıklara yol açan bazı somut örnekler:

  • signingConfigMülkiyet inşa türleri ve ürün tatlar hem de ayarlanabilir ... ama minifyEnabled(ve sanırım, shrinkResources?) Sadece yapı tiplerinde yapılandırılabilir.

  • applicationIdsadece ürün aromalarıyla belirtilebilir ... ve applicationIdSuffixsadece yapı tiplerinde belirtilebilir !?

Asıl soru (lar) :

Yukarıdaki örnekler göz önüne alındığında: yapı tiplerinin rolleri ile ürün aromaları arasında açık bir ayrım var mı?

Eğer öyleyse, onu anlamanın en iyi yolu nedir?

Değilse, nihayetinde yapı türlerini ve ürün lezzetlerini tek bir yapılandırılabilir DSL nesnesine birleştirmeyi planlıyor musunuz?


55
"hangi yapılandırma bir yapı türünde belirtilmelidir, hangi yapılandırma bir ürün aromasında belirtilmelidir" - yapı türleri geliştirme yaşam kalitenizi (hata ayıklama, "dogfood", sürüm, vb.) modeller. Ürün aromaları dağıtım stratejinizi modellenir (Google IAP ile Amazon IAP ve BlackBerry IAP vb.) Bunlar bağımsız kavramlar. Geri kalanlara gelince, uygulamaya bağlı olarak DSL'i nasıl kurduklarını biraz dikte eden teknik nedenler olduğunu hayal ediyorum ve bu nedenle birleşme planı varsa şaşırırdım.
CommonsWare

1
@CommonsWare yüksek düzeyde mantıklı geliyor. Ve evet, belki de türlerin / tatların sırayla işlenmesi, applicationIdörneğin bütününün nasıl ve ne zaman değiştirilebileceğini kısıtlar .
stkent

Yanıtlar:


168

Yorumlarda @CommonsWare'in söylediklerine genişleyen temel fikir, derleme türlerinin uygulamanızın işlevsel olarak farklı olmayan farklı sürümleri için olmasıdır - uygulamanızın bir hata ayıklama ve yayın sürümü varsa, aynı uygulama , ancak biri hata ayıklama kodu, belki daha fazla günlük kaydı, vb. içerir ve diğeri düzene sokulur ve optimize edilir ve muhtemelen ProGuard aracılığıyla gizlenir. Tatlar ile niyet, uygulamanın bir şekilde önemli ölçüde farklı olmasıdır. En açık örnek, uygulamanızın ücretli ve ücretsiz bir sürümü olabilir, ancak geliştiriciler ayrıca dağıtıldığı yere göre farklılaşabilir (bu, uygulama içi faturalandırma API'sı kullanımını etkileyebilir).

Farklı müşteriler için benzer bir uygulamanın birçok, birçok farklı sürümünü yapan geliştiriciler vardır - bir örnek, web görünümünde, her URL için farklı URL'lere ve markalara sahip bir web sayfasını açan basit bir uygulama olabilir - bu bir lezzetlerin iyi kullanımı.

Tekrarlamak gerekirse, "aynı uygulama" ise, son kullanıcı için önemli olmayan bazı farklılıkları modulo ve özellikle biri dışındaki tüm varyantlar kendi test ve geliştirme kullanımınız içinse ve yalnızca bir varyant konuşlandırılacaksa son kullanıcılar, yapı türleri için iyi bir adaydır. "Farklı" bir uygulama ve kullanıcılara birden fazla varyant yerleştirilecekse, belki de bir ürün lezzeti için adaydır.

Yapı türleri ve tatlar arasında bazı işlev farklılıkları olduğunu gördünüz, çünkü bazı seçenekler biri için destekleniyor, diğeri için desteklenmiyor. Ancak kavramlar benzer olmalarına rağmen farklıdır ve bunları birleştirme planı yoktur.


17
Teşekkürler, Scott. Kesinlikle bu ayrımın mantıklı olduğunu düşünüyorum (ve 'yapı türü' ve 'ürün aroması' isimleri bu kullanım için uygun). Belki de applicationIdsorunu şu şekilde anlayabiliriz : tatlar uygulamanızın "tamamen farklı" sürümlerini temsil ettiğinden, "tamamen" farklı uygulama kimliklerini belirleyebilmek mantıklıdır; buna karşılık, sabit bir lezzet için, çoklu yapı tiplerinin hepsi "aynı" uygulamayı temsil eder ve bu nedenle sadece uygulama kimliği sonekini değiştirmesine izin verilir (böylece uygulama kimliklerinin 'gruplandırılması' korunur).
stkent

28

buildType Uygulamamızı nasıl paketlediğimizi yapılandırmak

  • shrinkResources
  • progaurdFile
  • vb.

Lezzet farklı sınıfları ve kaynakları yapılandırır.

  • Flavor1'de MainActivity'niz bir şey yapabilir ve Flavor2'de farklı uygulama

  • differente Uygulama adı

  • vb.

Her ürün aroması, diğerlerinin yanı sıra, aşağıdaki özelliklerle aynı özelliklere dayanan kendi özelliklerine sahip olabilir defaultConfig:

  • applicationId
  • minSdkVersion
  • targetSdkVersion
  • versionCode
  • versionName

9

Farkı özüne kadar nasıl damıtıyorum:

  • buildTypeolduğunu nasıl inşa.
  • flavoryapının ne olduğudur.

0

build typesGöstermek için kullanılır debug/releasefarklı sertifikalar ve etkinleştirme ile modu Proguardveya debuggablebayrak.

flavorsÖzel özellikler için kullanılır (örneğin ücretsiz veya ücretli sürümü için), minimum and target APIgibi seviyeleri, cihaz ve API gereksinimleri layout, drawableböylece farklı farklı kod ve kaynaklara sahip olabilir flavors.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.