Чому типи складання відрізняються від ароматів продуктів?


173

Передмова: це не питання про те, як використовувати типи складання та ароматизатори продуктів у додатку для Android. Я розумію основні поняття. Це питання стосується більше спроб зрозуміти, яку конфігурацію слід вказати в типі збірки, яку конфігурацію слід вказати в ароматі продукту та чи потрібне будь-яке розрізнення.

На цьому тижні я дізнався більше про конфігурацію gradle для додатків Android. Спочатку я думав, що я добре впорався з типами збірки та ароматами продуктів, але чим глибше я заглибився в документацію, тим більше я зрозумів, що різниця між ними зовсім не зрозуміла.

Оскільки існує чітко визначена ієрархія (у тому сенсі, що властивості, визначені у типах збірки, мають перевагу над тими, які вказані в ароматах продуктів), я не розумію, чому взагалі потрібно розрізняти типи складання та ароматизатори продукту. Чи не було б краще об'єднати всі властивості та методи в об'єкт DSL аромату продукту, а потім просто розглядати тип збірки як (за замовчуванням) смаковий розмір?

Деякі конкретні приклади, які призвели до моєї плутанини:

  • signingConfigВластивість можна встановити в обох типах зборки і смаків продукції ... але minifyEnabled(і, я вважаю, shrinkResources?) Ви можете змінити тільки в типах збірки.

  • applicationIdможна вказати лише в ароматах продукту ... і applicationIdSuffixможна вказати лише у типах збірки !?

Актуальні питання :

З огляду на наведені вище приклади: чи існує чітка відмінність між ролями типів складання та ароматами продуктів?

Якщо так, то який найкращий спосіб зрозуміти це?

Якщо ні, чи планується врешті-решт об’єднати типи збірок та ароматизатори продуктів в єдиний об'єкт DSL, який можна настроювати?


55
"яку конфігурацію слід вказати в типі збірки, яку конфігурацію слід вказати в ароматі продукту" - типи збірки моделюють життєвий цикл вашої розробки (налагодження, "собачі продукти", реліз тощо). Ароматизатори продукту моделюють вашу стратегію розповсюдження (Google IAP проти Amazon IAP проти BlackBerry IAP тощо). Це самостійні поняття. Щодо решти, я б міг уявити, що існують технічні причини, пов'язані з реалізацією, які трохи диктували те, як вони створили DSL, і, отже, я був би здивований, якщо є план злиття.
CommonsWare

1
@CommonsWare, який має багато сенсу на високому рівні. І так, можливо, послідовна обробка типів / ароматизаторів обмежує, як і коли можна змінити ціле applicationId, наприклад.
stkent

Відповіді:


168

Розширюючи те, що @CommonsWare сказав у коментарях, основна ідея полягає в тому, що типи збірки є для різних збірок вашої програми, які функціонально не відрізняються - якщо у вас є налагодження та версія версії свого додатка, вони є тим же додатком , але один містить код налагодження, можливо більше журналів тощо, а другий упорядкований та оптимізований та, можливо, затуманений через ProGuard. Що стосується ароматів, ціль полягає в тому, що додаток дещо відрізняється. Найяскравішим прикладом може бути безкоштовна порівняно з платною версією вашої програми, але розробники можуть також розрізняти, залежно від місця її розповсюдження (що може вплинути на використання API через виставлення рахунків).

Є розробники, які роблять багато, багато різних версій подібного додатка для різних клієнтів - приклад може бути простим додатком, який відкриває веб-сторінку у веб-перегляді, з різними URL-адресами та брендингом для кожної версії - це добре використовувати ароматизатори.

Щоб повторити, якщо це "той самий додаток", модулюйте деякі відмінності, які не важливі для кінцевого користувача, і особливо, якщо всі варіанти, окрім одного, призначені для власного тестування та використання, і лише один варіант буде розгорнуто в кінцеві користувачі, то це хороший кандидат для типів збірки. Якщо це "інша" програма і кілька варіантів будуть розгорнуті для користувачів, то, можливо, це кандидат на аромат продукту.

Ви вже бачили, що існують деякі функціональні відмінності між типами збірки та смаками, оскільки деякі варіанти підтримуються для одного, а не для іншого. Але поняття різні, хоча вони схожі, і немає плану їх об'єднання.


17
Спасибі, Скотт. Я, безумовно, вважаю, що це відмінність має сенс (і назви "тип збірки" та "аромат продукту" підходять для цього використання). Можливо, можна зрозуміти applicationIdпроблему так: оскільки аромати представляють "абсолютно різні" версії вашої програми, є сенс мати можливість вказати "повністю" різні ідентифікатори додатків; тоді як для фіксованого аромату всі типи складання представляють "один" додаток, і тому дозволяється змінювати лише суфікс ідентифікатора додатка (тим самим зберігаючи "групування" ідентифікаторів додатків).
stkent

28

buildType налаштувати, як ми пакуємо наш додаток

  • скорочуютьсяресурси
  • progaurdFile
  • тощо.

Налаштування аромату різних класів та ресурсів.

  • у Flavor1 ваша MainActivity може щось зробити, а в Flavor2 інша реалізація

  • диференціювати назву програми

  • тощо.

Кожен продукт аромат може мати власні значення наступних властивостей, серед інших, які ґрунтуються на тих самих властивостях defaultConfig:

  • applicationId
  • minSdkVersion
  • targetSdkVersion
  • versionCode
  • versionName

9

Ось як я перенаправляю різницю до її суті:

  • buildType- як будувати.
  • flavorце те, що складено.

0

build typesВикористовуються для позначення debug/releaseрежиму з різними сертифікатами та дозволяють Proguardабо debuggableпрапором.

Вони flavorsвикористовуються для користувацьких функцій (наприклад, безкоштовної або платної версії), minimum and target APIрівнів, вимог до пристрою та API, таких як layout, drawableтому у вас можуть бути різні коди та ресурси у різних flavors.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.