Уникальный buildConfigField для всех вкусов с размерами - PullRequest
0 голосов
/ 08 мая 2019

У меня есть два измерения вкуса: brand и version, мой конфиг вкуса выглядит так:

flavorDimensions 'brand', 'version'

Brand1 { 
    dimension 'brand'
    ...
}

Brand2 {
    dimension 'brand'
    ...
}

Version1 {
    dimension 'version'
    ...
}

Version2 {
    dimension 'version'
    ...
}

И я хочу иметь четыре уникальных buildConfigField -с (например, HockeyAppId) для каждой конфигурации:

  • Brand1Version1
  • Brand1Version2
  • Brand2Version1
  • Brand2Version2

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Я написал для этого свой собственный плагин: https://github.com/nikialeksey/porflavor, и теперь я могу определить такие поля:

flavorDimensions 'brand', 'version'

productFlavors {
  Brand1 { 
    dimension 'brand'
    ...
  }
  Brand2 {
    dimension 'brand'
    ...
  }

  Version1 {
    dimension 'version'
    ...
  }
  Version2 {
    dimension 'version'
    ...
  }
}

apply plugin: 'com.nikialeksey.porflavor'
porflavor {
  Brand1Version1 {
    buildConfigField "boolean", "fooFeatureEnabled", "false"
  }
  Brand2Version2 {
    buildConfigField "boolean", "fooFeatureEnabled", "true"
  }
  ...
}

0 голосов
/ 08 мая 2019

так что это довольно просто.Вы можете изменить любой аромат или тип выпуска без каких-либо сумасшедших усилий.

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

flavour1 -> в измерении 1

flavour1Dimension2 -> в измерении 2

flavour2 -> в измерении 1

flavour2Dimension2 -> в измерении 2 и т. Д.

Здесь я приведу пример использования динамических

  • ресурсов
  • buildconfig
  • заполнитель манифеста
  • идентификатор приложения

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

flavorDimensions 'default', 'secondary'

productFlavors {
    a35Demo {
        dimension 'default'
        applicationId "com.appstudio35.yourappstudio.demo"
        buildConfigField "int", "BUSINESS_ID", "1"
        resValue "string", "app_name", "App Studio 35"
        buildConfigField "String", "NOTIFICATION_ICON", '"ic_launcher"'
        manifestPlaceholders = [iconPath:"@mipmap/ic_launcher", roundIconPath:"@mipmap/ic_launcher_round"]
    }
    smallville {
        dimension 'secondary'
        applicationId "com.appstudio35.yourappstudio.smallville"
        buildConfigField "int", "BUSINESS_ID", "22"
        resValue "string", "app_name", "Smallville"
        buildConfigField "String", "NOTIFICATION_ICON", '"ic_launcher_smallville"'
        manifestPlaceholders = [iconPath:"@mipmap/ic_launcher_smallville", roundIconPath:"@mipmap/ic_launcher_round_smallville"]
    }
}

buildTypes {
    debug {
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "String", "SERVER_URL", '"https://api.dev.myurl.com"'
        shrinkResources false //remove unused resources per flavor
        minifyEnabled false
    }
    release {
        buildConfigField "String", "SERVER_URL", '"https://api.prod.myurl.com"'

        shrinkResources true //remove unused resources per flavor
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        //production builds
        productFlavors.a35Demo.signingConfig signingConfigs.releaseA35YourAppStudio
        productFlavors.smallville.signingConfig signingConfigs.releaseA35YourAppStudio
    }
}

Счастливого кодирования!

...