Problème de dimension de saveur Android Studio 3.0

224

Mise à niveau vers la version Studio Canary. Mon projet précédent de Telegram Messenger donne l'erreur suivante.

Erreur: toutes les saveurs doivent désormais appartenir à une dimension de saveur nommée. L'arôme «armv7» n'est pas affecté à une dimension d'arôme. En savoir plus sur https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

Que devrais-je faire? J'ai déjà vu ce lien mais je ne comprenais pas quoi faire. J'ai maintenant 3 variantes de build, release, debug et foss.

Omkar Nath Singh
la source

Réponses:

528

Si vous n'avez pas vraiment besoin du mécanisme, spécifiez simplement une dimension de saveur aléatoire dans votre build.gradle:

android { 
    ...
    flavorDimensions "default"
    ...
}

Pour plus d'informations, consultez le guide de migration

tknell
la source
1
Merci. J'avais déjà une dimension "versionCode", je l'ai utilisée.
Omkar Nath Singh
2
flavourDimensions "versionCode" productFlavors {debug {dimension "default" versionName "1.0"} release {dimension "default" versionName "1.0"} foss {dimension "default" versionName "1.0"}} J'ai eu cette erreur .. Les noms de ProductFlavor ne peuvent pas entrer en collision avec des noms BuildType. Pourriez-vous s'il vous plaît quelqu'un m'aider. J'ai eu cette erreur AS 3.0 beta version Canary avec Kotlin.
Md Maidul Islam du
5
Si vous n'avez qu'une seule dimension, vous n'avez pas besoin de la spécifier dans chaque saveur. La première flavorDimensions "default"ligne ci-dessus suffit .
Graham Borland du
1
@GrahamBorland merci pour cet indice, j'ai mis à jour la réponse en conséquence.
tknell
1
peut-être ajouter que le fichier estapp/build.gradle
spedy
60

Après avoir essayé et lu attentivement, je l'ai résolu moi-même. La solution consiste à ajouter la ligne suivante dans build.gradle.

flavourDimensions "versionCode"

android { 
       compileSdkVersion 24
       .....
       flavorDimensions "versionCode"
} 
Omkar Nath Singh
la source
2
où dans le gradle ajoutez-vous cette ligne? Un peu plus de contexte serait utile
Brando Madden
2
À l'intérieur du fichier build.gradle, dans Android {...}
Omkar Nath Singh
android {compileSdkVersion 24 .... // ajouter ici}
Omkar Nath Singh
16
pourquoi "versionCode" et pas autre chose? cela affectera-t-il de toute façon versionCode?
MBH
1
@MBH J'ai cela dans mes productFlavours. Vous avez juste besoin d'une clé unique pour vous identifier.
Omkar Nath Singh
40

Ici, vous pouvez résoudre ce problème, vous devez ajouter flavourDimension avec le nom de productFlavors et devez également définir la dimension, voir l'exemple ci-dessous et pour plus d'informations, voir ici https://developer.android.com/studio/build/gradle-plugin- 3-0-0-migration.html

flavorDimensions 'yourAppName' //here defined dimensions
productFlavors {
    production {
        dimension 'yourAppName' //you just need to add this line
        //here you no need to write applicationIdSuffix because by default it will point to your app package which is also available inside manifest.xml file.

    }

    staging {
        dimension 'yourAppName' //added here also
        applicationIdSuffix ".staging"//(.staging) will be added after your default package name.
        //or you can also use applicationId="your_package_name.staging" instead of applicationIdSuffix but remember if you are using applicationId then You have to mention full package name.
        //versionNameSuffix "-staging"

    }

    develop {
        dimension 'yourAppName' //add here too
        applicationIdSuffix ".develop"
        //versionNameSuffix "-develop"

    }
Abdul Rizwan
la source
19

Si vous ne souhaitez pas utiliser de dimensions, vous devez utiliser cette ligne

android { 
compileSdkVersion 24

...
flavorDimensions "default"
...
}

mais si vous voulez utiliser des dimensions, vous devez d'abord déclarer votre nom de dimension, puis utiliser ce nom après que cet exemple provienne des documentations:

android {
...
buildTypes {
debug {...}
release {...}
}

  // Specifies the flavor dimensions you want to use. The order in which you
  // list each dimension determines its priority, from highest to lowest,
  // when Gradle merges variant sources and configurations. You must assign
  // each product flavor you configure to one of the flavor dimensions.
  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"
  ...
    }
  }
}
...
Mohammad Aldefrawy
la source
9

J'ai utilisé flavourDimensions pour mon application dans build.gradle (Module: app)

flavorDimensions "tier"

productFlavors {
    production {
        flavorDimensions "tier"
        //manifestPlaceholders = [appName: APP_NAME]
        //signingConfig signingConfigs.config
    }
    staging {
        flavorDimensions "tier"
        //manifestPlaceholders = [appName: APP_NAME_STAGING]
        //applicationIdSuffix ".staging"
        //versionNameSuffix "-staging"
        //signingConfig signingConfigs.config
    }
}

Consultez ce lien pour plus d'informations

// Specifies two flavor dimensions.
flavorDimensions "tier", "minApi"

productFlavors {
     free {
            // Assigns this product flavor to the "tier" flavor dimension. Specifying
            // this property is optional if you are using only one dimension.
            dimension "tier"
            ...
     }

     paid {
            dimension "tier"
            ...
     }

     minApi23 {
            dimension "minApi"
            ...
     }

     minApi18 {
            dimension "minApi"
            ...
     }
}
Ranjit Chandel
la source
0

Si vous avez des saveurs simples (gratuit / pro, démo / complet, etc.), ajoutez-le au fichier build.gradle:

android {
...
flavorDimensions "version"
productFlavors {
        free{
            dimension "version"
            ...
            }
        pro{
            dimension "version"
            ...
            }
}

Par dimensions, vous pouvez créer des "saveurs en saveurs". Lisez plus .

Style-7
la source