Предисловие: это не вопрос о том, как использовать типы сборки и разновидности продукта в приложении для Android. Я понимаю основные концепции. Этот вопрос больше касается попыток понять, какая конфигурация должна быть указана в типе сборки, какая конфигурация должна быть указана во вкусе продукта и действительно ли необходимо какое-либо различие.
На этой неделе я узнал больше о конфигурации gradle для приложений Android. Сначала я думал, что хорошо разбираюсь в типах сборки по сравнению со вкусами продукта, но чем глубже я углублялся в документацию, тем больше понимал, что различие между этими двумя понятиями мне совершенно не понятно.
Поскольку существует четко определенная иерархия (в том смысле, что свойства, указанные в типах сборки, имеют приоритет над свойствами, указанными в вариантах продукта), я не понимаю, почему вообще необходимо различать типы сборки и варианты продукта. Не лучше ли объединить все свойства и методы в DSL-объект «Ароматизатор продукта», а затем просто рассматривать тип сборки как («по умолчанию») Ароматизатор?
Несколько конкретных примеров, которые привели меня в замешательство:
signingConfig
Свойство можно установить в обоих типах сборки и вкусов продукции ... ноminifyEnabled
(и, я полагаю,shrinkResources
?) Можно настроить только в типах сборки.applicationId
может быть указано только в вариантах продукта ... иapplicationIdSuffix
может быть указано только в типах сборки !?
Актуальный вопрос (ы) :
Учитывая приведенные выше примеры: существует ли четкое различие между ролями типов сборки и разновидностей продукта?
Если так, то как лучше всего это понять?
Если нет, планируется ли в конечном итоге объединить типы сборки и разновидности продукта в один настраиваемый объект DSL?
источник
applicationId
, например, можно изменить все .Ответы:
Расширяя сказанное @CommonsWare в комментариях, основная идея заключается в том, что типы сборок предназначены для разных сборок вашего приложения, которые не отличаются функционально - если у вас есть отладочная и выпускная версии приложения, это одно и то же приложение. , но один содержит код отладки, возможно, больше журналирования и т. д., а другой оптимизирован и оптимизирован и, возможно, скрыт с помощью ProGuard. Суть ароматов в том, что приложение заметно отличается в некотором роде. Самым ярким примером может быть бесплатная и платная версия вашего приложения, но разработчики также могут различать в зависимости от того, где оно распространяется (что может повлиять на использование API биллинга в приложении).
Есть разработчики, которые делают много разных версий одного и того же приложения для разных клиентов - примером может быть простое приложение, которое открывает веб-страницу в веб-представлении, с разными URL-адресами и брендингом для каждой версии - это хорошее использование ароматов.
Повторим, если это «одно и то же приложение», по модулю некоторые различия, которые не важны для конечного пользователя, и особенно, если все варианты, кроме одного, предназначены для вашего собственного тестирования и разработки, и только один вариант будет развернут в конечные пользователи, то это хороший кандидат для типов сборки. Если это «другое» приложение и для пользователей будет развернуто несколько вариантов, то, возможно, это кандидат на вкус продукта.
Вы уже видели, что между типами сборки и разновидностями есть некоторые функциональные различия в том, что некоторые опции поддерживаются для одного, но не для другого. Но концепции разные, даже если они похожи, и не планируется объединять их вместе.
источник
applicationId
проблему следующим образом: поскольку ароматы представляют «совершенно разные» версии вашего приложения, имеет смысл указать «совершенно» разные идентификаторы приложений; в то время как для фиксированного варианта все типы сборки представляют «одно и то же» приложение, и поэтому им разрешено изменять только суффикс идентификатора приложения (сохраняя, таким образом, «группировку» идентификаторов приложения).buildType настроить, как мы упаковываем наше приложение
Аромат настраивает разные классы и ресурсы.
в Flavor1 ваша MainActivity может что-то делать, а в Flavor2 другая реализация
другое имя приложения
и т.п.
Каждый продукт вкуса может иметь свои собственные значения следующих свойств, среди прочих, которые основаны на тех же свойствах из
defaultConfig
:applicationId
minSdkVersion
targetSdkVersion
versionCode
versionName
источник
Вот как я понимаю разницу в ее сути:
buildType
это как построить.flavor
это что из сборки.источник
build types
Используются для обозначенияdebug/release
режима с различными сертификатами и позволяютProguard
илиdebuggable
флагом.Они
flavors
используются для того, чтобы иметь пользовательские функции (например, бесплатную или платную версию),minimum and target API
уровни, требования к устройствам и API, напримерlayout
,drawable
так что вы можете иметь разные коды и ресурсы в разныхflavors
.источник