Problem mit der Geschmacksdimension von Android Studio 3.0


224

Upgrade auf Studio Canary Build. Mein vorheriges Projekt von Telegram Messenger gibt folgenden Fehler.

Fehler: Alle Geschmacksrichtungen müssen jetzt zu einer benannten Geschmacksdimension gehören. Das Aroma 'armv7' ist keiner Aromadimension zugeordnet. Weitere Informationen finden Sie unter https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

Was soll ich machen? Ich habe diesen Link bereits gesehen, konnte aber nicht verstehen, was zu tun ist. Ich habe jetzt 3 Build-Varianten, Release, Debug und Foss.

Antworten:


526

Wenn Sie den Mechanismus nicht wirklich benötigen, geben Sie einfach eine zufällige Geschmacksdimension in Ihrem build.gradle:

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

Weitere Informationen finden Sie im Migrationshandbuch


1
Vielen Dank. Ich hatte bereits eine Dimension "versionCode", die ich verwendet habe.
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"}} Ich habe diesen Fehler erhalten ..ProductFlavor-Namen können nicht kollidieren mit BuildType-Namen. Könnten Sie mir bitte jemand helfen? Ich habe diesen Fehler AS 3.0 Beta-Version Canary mit Kotlin.
Md Maidul Islam

5
Wenn Sie nur eine Dimension haben, müssen Sie diese nicht in jedem Geschmack angeben. Nur die erste flavorDimensions "default"Zeile oben ist alles, was benötigt wird.
Graham Borland

1
@ AbrahamBorland danke für den Hinweis, ich habe die Antwort entsprechend aktualisiert.
Knell

1
vielleicht hinzufügen, dass die Datei ist app/build.gradle
spedy

60

Nachdem ich es sorgfältig versucht und gelesen hatte, löste ich es selbst. Die Lösung besteht darin, die folgende Zeile in build.gradle einzufügen.

FlavorDimensions "versionCode"

android { 
       compileSdkVersion 24
       .....
       flavorDimensions "versionCode"
} 

2
Wo im Gradle fügen Sie diese Zeile hinzu? Ein bisschen mehr Kontext wäre hilfreich
Brando Madden

2
In der build.gradle-Datei, in Android {...}
Omkar Nath Singh

android {compileSdkVersion 24 .... // hier hinzufügen}
Omkar Nath Singh

16
warum "versionCode" und sonst nichts? wird es sowieso versionCode beeinflussen?
MBH

1
@MBH Das habe ich in meinem productFlavours. Sie benötigen lediglich einen eindeutigen Schlüssel zur Identifizierung.
Omkar Nath Singh

40

Hier können Sie dieses Problem beheben. Sie müssen flavourDimension mit dem Namen von productFlavors hinzufügen und die Dimension definieren. Weitere Informationen finden Sie im folgenden Beispiel. Weitere Informationen finden Sie hier 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"

    }

19

Wenn Sie keine Bemaßungen verwenden möchten, sollten Sie diese Linie verwenden

android { 
compileSdkVersion 24

...
flavorDimensions "default"
...
}

Wenn Sie jedoch Dimensionen verwenden möchten, sollten Sie zuerst Ihren Dimensionsnamen deklarieren und diesen Namen dann verwenden, nachdem DIESES Beispiel aus den Dokumentationen stammt:

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"
  ...
    }
  }
}
...

9

Ich habe flavourDimensions für meine Anwendung in build.gradle (Modul: App) verwendet.

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
    }
}

Überprüfen Sie diesen Link für weitere Informationen

// 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"
            ...
     }
}

0

Wenn Sie einfache Varianten haben (kostenlos / pro, Demo / voll usw.), fügen Sie diese zur Datei build.gradle hinzu:

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

Nach Dimensionen können Sie "Aromen in Aromen" erstellen. Lesen Sie mehr .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.