Модификация опций gradle на лету

Часто, гугл дает нам попробовать свои недоделанные разработки. Например, новый компилятор ресурсов R8. Он пришел на замену “старого” Proguard, более быстр и теперь занимается еще и вырезанием классов. Включить можно в gradle.properties:

android.enableR8=true

И если у вас в build.gradle что-то вроде:

	buildTypes {

		release {
...
			minifyEnabled true
...
		}
  }

То узнать о стабильности его работы вы сможете только собрав релизную apk. Если вы это делаете не часто, то проблем не избежать. Например, недавно он вырезал часть полей, аннотаций и классов в нашем проекте. Проделал так аккуратно, что обнаружить это мы смогли только по не загружающейся одной из страниц приложения.

Нам хотелось быстрой сборки, поэтому возникла задача разрешать R8 только в сборке из студии.

Итак, вот как это можно сделать через build.gradle:

boolean isInvokeFromIde = project.properties['android.injected.invoked.from.ide']//определяем сборку из студии
this['android.enableR8']  = isInvokeFromIde//меняем настройку gradle.properties в build.gradle в рантайме

Подмена должна происходить до вызова android-plugin.