Подтвердить что ты не робот

Получите вкус продукта или вариант сборки в приложении для 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 в андроиде, который я могу использовать, чтобы получить название аромата продукта?

4b9b3361

Ответ 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 в своем приложении. Компилятор будет держать вас в курсе и убедитесь, что вы добавили это для всех вкусов.

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