Установите applicationIdSuffix для конкретной комбинации вкусов и типов в Gradle 4.1

#android #gradle #android-gradle-plugin

#Android #градация #android-gradle-плагин

Вопрос:

У меня есть разные типы сборки и разные вкусовые характеристики в моем приложении. Я хочу добавить определенный вкусовой суффикс к идентификатору приложения только для одного конкретного типа сборки.

Например, для stageApi комбинации вкусов и beta типов сборки я бы хотел добавить суффиксы .stageapi , и .beta поэтому результирующий идентификатор приложения будет my.application.stageapi.beta , но для debug и release я не хочу этого делать (я бы хотел иметь my.application.debug и my.application без суффикса api).

У меня уже был этот код раньше, и он работал просто отлично:

     productFlavors {

        ... 

        beta {
            applicationIdSuffix ".beta"
        }
    }

    applicationVariants.all { variant ->
        def name = variant.getName()
        if (name.contains("StageApiBeta")) {
            def mergedFlavor = variant.mergedFlavor
            mergedFlavor.setApplicationIdSuffix(".stageapi")
        }
    }
 

Но после обновления до Gradle plugin 4.1 он перестал работать. Он не выдает никакой ошибки, но результирующий идентификатор приложения my.application.beta равен without .stageapi .

Я пробовал разные подходы, но просто не могу понять, как это сделать сейчас. Мне также кажется, что в 4.2 будут и другие изменения API, но я бы хотел, чтобы это работало и в 4.1.

Комментарии:

1. Я сталкиваюсь с той же проблемой после обновления до версии 4.1.1, mergedFlavor.setApplicationId все еще работает, поэтому, если я не смогу найти лучшее решение, я просто объединю все идентификаторы приложений и установлю их таким образом.

Ответ №1:

Используйте flavorDimensions и устанавливайте разные суффиксы для ваших вариантов.

 flavorDimensions "dimen1" "dimen2"
productFlavors {
   beta {
     applicationIdSuffix ".beta"
     dimension "dimen1"
   }
   stageapi {
     applicationIdSuffix ".stageapi"
     dimension "dimen2"
   }
}
 

Комментарии:

1. Как я уже упоминал в вопросе, я хотел бы иметь его только для определенных комбинаций. При таком подходе он будет применен ко всем из них. Например, комбинация debug-stageApi приведет к my.application.stageapi.debug , чего я не хочу.