Получите вкус продукта или вариант сборки в приложении для Android
У меня есть приложение для Android с множеством различных вкусов продукта, настроенных в файле build.gradle, например
productFlavors {
someFlavor {}
anotherFlavor {}
}
В моем коде приложения я хочу иметь возможность получить имя компилируемого в настоящее время вкуса (или варианта сборки). Одним из решений является следующее:
productFlavors {
someFlavor {
buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";"
}
anotherFlavor {
buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";"
}
}
И затем в моем вызове приложения Android BuildConfig.PRODUCT_FLAVOR
.
Есть ли способ получить gradle, чтобы сделать это автоматически? Или есть какой-то другой API в андроиде, который я могу использовать, чтобы получить название аромата продукта?
Ответы
Ответ 1
Изменить: теперь это делается автоматически, начиная с версии 0.7 плагина. BuildConfig.java
будет содержать
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "f1Fa";
public static final String FLAVOR_group1 = "f1";
public static final String FLAVOR_group2 = "fa";
FLAVOR
представляет собой комбинированное название аромата со всеми используемыми вкусовыми размерами/группами. Затем каждое измерение доступно как FLAVOR_<group name>
.
Наконец BUILD_TYPE
содержит имя используемого типа сборки.
Если у вас есть один размер аромата, тогда у вас есть константа FLAVOR
.
Это единственный способ сделать это прямо сейчас.
Одна вещь, которую вы можете сделать, это автоматизировать ее. Таким образом, вы можете сделать что-то вроде этого:
android {
productFlavors.whenObjectAdded { flavor ->
flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";"
}
// your normal config here.
}
Таким образом, вам не нужно вручную делать это для каждого аромата.
Ответ 2
Принятое решение является удивительным. В некоторых случаях альтернатива может быть полезна.
Вы можете добавить файл конфигурации, например "Appconfig.java" в ваши исходные папки productFlavor, т.е. src/<productflavor>/java/<packagename>/Appconfig.java
; вы можете использовать Appconfig.PRODUCT_FLAVOR
в своем приложении. Компилятор будет держать вас в курсе и убедитесь, что вы добавили это для всех вкусов.
Как я уже сказал, в этом конкретном случае приемлемое решение, вероятно, лучше, поскольку вам даже не нужно ничего добавлять для новых продуктов, но этот подход может быть полезен для других случаев.