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