Как пользоваться Product Flavors и Build Variants для создания нескольких версий приложения

Product flavors — незаменимая gradle-фича, полезная при создании нескольких версий одного Android-приложения (имею ввиду, например, версии demo/full/pro, а также вариации под различные устройства). Достаточно добавить несколько строк кода в раздел android{...} файла build.gradle:

android {
	...
	productFlavors {
		free {
			applicationId "azagroup.testapp"
			versionName "1.0"
		}
		pro {
			applicationId "azagroup.testapp.pro"
			versionName "1.0-pro"
		}
	}
}

В productFlavors могут находиться все те же правила, что и в элементе defaultConfig. В данном случае я переопределил applicationId, чтобы в Google Play это было отдельным приложением, и versionName, чтобы у пользователя отображалась соответствующая версия. Кстати, из defaultConfig эти дублирующие правила можно будет убрать.

После правки обновите проект (нажмите Sync Now, либо Refresh Gradle projects). Теперь можно добавлять классы и ресурсы специально для каждой из версий приложения.

Например, чтобы добавить ресурс, нужно кликнуть ПКМ по названию модуля и выбрать New > Android resource file. Далее можно будет указать для какой версии приложения нужен данный ресурс:

New Resource File

Таким образом можно легко дать приложению информацию о том, в каком режиме оно запущено, debug или release. Достаточно иметь 2 value-ресурса, один в main, другой, скажем, в debug, и в каждый из них добавить строчку с нужным значением, которое затем проверять при запуске приложения:

<bool name="debug_mode">true</bool>

Идём дальше. Чтобы добавить разные классы для разных версий, нужно сначала создать соответствующую файловую структуру, например, src/free/java и src/pro/java.

Обратите внимание, что в отличие от ресурсов, нельзя создать один и тот же класс в папке main и, например, в папке pro. Возникнет ошибка дублирования. Если вам нужно иметь модификацию одного класса для разных версий, то создавайте в каждой из веток свою версию этого класса, а из папки main его убирайте. После выбора нужного Build Variant соответствующая ветка станет активной:

Same Classes in Different Flames

Можно запускать проект!