Что имеет преимущество, типы сборки или ароматы Gradle?

Скажем, у меня есть константа, определенная на обоих уровнях: в типе сборки я установил ее в «mybuild», и в аромате я установил ее в «myflavor».

Например, здесь:

buildTypes { debug { resValue "string", "analytics_key", "XXX_SANDBOX_KEY_XXX" } } productFlavors { appA { resValue "string", "analytics_key", "XXX_KEY_FOR_A_XXX" } appB { resValue "string", "analytics_key", "XXX_KEY_FOR_A_XXX" } } 

Я хочу отправлять события различных приложений (thta is, flavors) в разные аккаунты на моей платформе аналитики. Но, если я отлаживаю, я хочу отправить их все в мою учетную запись sandbox.

Оригинальный вопрос: что имеет преимущество? Из моего теста я уже могу ответить на этот вопрос: тот, что есть в типе сборки.

Тем не менее, тем интереснее: гарантируется ли это?

(Или, есть ли лучший способ сделать это?)

Это гарантировано?

Типы сборки обычно считаются более приоритетными, чем вкусы продуктов для вещей на одном уровне (например, тот же модуль). Цитирование документации :

Обычно конфигурация типа сборки является наложением поверх другой конфигурации. Например, пакет PackageNameSuffix типа сборки добавляется к имени пакета Product Flavor.

Манифест слияния, однако, довольно сложный, требующий собственного набора документов .

В вашем случае вы создаете ресурсы. В этом случае он должен следовать тем же правилам, как если бы вы использовали эти значения в качестве строковых ресурсов в соответствующих наборах источников:

Все ресурсы (Android res и активы) используются с использованием приоритета оверлея, где Тип сборки переопределяет Атрибут продукта, который переопределяет основной источник.

Если resValue начал вести себя иначе, чем эквивалент с использованием наборов источников, я бы счел это ошибкой.

В качестве альтернативы вы можете разместить свои ресурсы в файле string.xml в папке-источнике вашей папки buildType, в папке productFlavour или в папке buildVariant.

Если вы поместите его в папку buildVariant, если будете уверены, что это значение будет использовано.

 src-Root |->main |->debugAppA <- resources in this combination will be given precedence. | |->res | |->values | |-> strings.xml |-> debug | |->res | |->values | |-> strings.xml |-> appA | |->res | |->values | |-> strings.xml