@baddev

Как устроен Flavor Dimensions в Android?

Помогите пожалуйста разобраться с Flavor Dimensions.
Если я правильно понял, то данная фича позволяет готовить разные версии одного приложения.
В документации есть такое:
flavorDimensions "version"
    productFlavors {
        demo {
            // Assigns this product flavor to the "version" flavor dimension.
            // This property is optional if you are using only one dimension.
            dimension "version"
            applicationIdSuffix ".demo"
            versionNameSuffix "-demo"
        }
        full {
            dimension "version"
            applicationIdSuffix ".full"
            versionNameSuffix "-full"
        }
    }


То есть в секции productFlavors есть две версии приложения(demo и full) - это вроде понятно. Я не могу понять чем является и для чего flavorDimensions "version".

Вот другой пример с более богатой flavorDimensions из этой же документации:

flavorDimensions "api", "mode"

  productFlavors {
    demo {
      // Assigns this product flavor to the "mode" flavor dimension.
      dimension "mode"
      ...
    }

    full {
      dimension "mode"
      ...
    }

    // Configurations in the "api" product flavors override those in "mode"
    // flavors and the defaultConfig block. Gradle determines the priority
    // between flavor dimensions based on the order in which they appear next
    // to the flavorDimensions property above--the first dimension has a higher
    // priority than the second, and so on.
    minApi24 {
      dimension "api"
      minSdkVersion 24
      // To ensure the target device receives the version of the app with
      // the highest compatible API level, assign version codes in increasing
      // value with API level. To learn more about assigning version codes to
      // support app updates and uploading to Google Play, read Multiple APK Support
      versionCode 30000 + android.defaultConfig.versionCode
      versionNameSuffix "-minApi24"
      ...
    }

    minApi23 {
      dimension "api"
      minSdkVersion 23
      versionCode 20000  + android.defaultConfig.versionCode
      versionNameSuffix "-minApi23"
      ...
    }

    minApi21 {
      dimension "api"
      minSdkVersion 21
      versionCode 10000  + android.defaultConfig.versionCode
      versionNameSuffix "-minApi21"
      ...
    }
  }


То есть это какая-то группировка версий приложений, но я не могу понять смысл, поэтому собственно прошу о помощи.

Ну и с Хабра:
"Предположим, вам необходимо создать платное и бесплатное приложение. При этом ваше приложение выпускается для телевизоров, планшетов и телефонов. Более того, ваше приложение публикуется в разных маркетах."

android {
   flavorDimensions "device", "paid", "market"

   productFlavors {
       tv {
           dimension 'device'
       }
       tablet {
           dimension 'device'
       }
       phone {
           dimension 'device'
       }

       free {
           dimension 'paid'
       }
       premium {
           dimension 'paid'
       }

       google {
           dimension 'market'
       }

       amazon {
           dimension 'market'
       }
   }
}


"Объявив 7 flavor-ов в трех разных группах вы получили целых 12 различных вариантов приложения."

Каким образом получилось 12?

В общем ничего не понятно. Заранее спасибо всем, кто поможет разобраться
  • Вопрос задан
  • 2003 просмотра
Решения вопроса 1
AWE64
@AWE64
Каким образом получилось 12?

Грубо говоря, при сборке приложения вам необходимо выбрать один flavor из каждого dimension.
Перебираем все варианты, получаем 12

tv free google
tv free amazon
tv premium google
tv premium amazon

tablet free google
tablet free amazon
tablet premium google
tablet premium amazon

phone free google
phone free amazon
phone premium google
phone premium amazon

но я не могу понять смысл

Смысл в том, что в разных dimensions можно настраивать параметры, относящиеся к логически разным аспектам приложения. Например, в tv-tablet-phone что-то про размеры, навигацию, в free-premium что-то про бизнес-логику, в google-amazon что-то про используемые библиотеки, куда должны вести сслыки на маркет и т.п.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы