Problema de Android Studio 3.0 Flavor Dimension

224

Actualizado a Studio Canary build. Mi proyecto anterior de Telegram Messenger está dando el siguiente error.

Error: Todos los sabores ahora deben pertenecer a una dimensión de sabor con nombre. El sabor 'armv7' no está asignado a una dimensión de sabor. Obtenga más información en https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

¿Qué tengo que hacer? Ya he visto ese enlace pero no podía entender qué hacer. Tengo 3 variantes de compilación ahora, lanzamiento, depuración y foss.

Omkar Nath Singh
fuente

Respuestas:

528

Si realmente no necesita el mecanismo, solo especifique una dimensión de sabor aleatorio en su build.gradle:

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

Para obtener más información, consulte la guía de migración.

tknell
fuente
1
Gracias. Ya tenía una dimensión "versionCode", la usé.
Omkar Nath Singh
2
tasteDimensions "versionCode" productFlavors {debug {dimension "default" versionName "1.0"} release {dimension "default" versionName "1.0"} foss {dimension "default" versionName "1.0"}} Obtuve este error. Los nombres de ProductFlavor no pueden colisionar con nombres BuildType. ¿Podría por favor que alguien me ayude? Recibí este error AS 3.0 versión beta Canarias con Kotlin.
Md Maidul Islam
55
Si solo tiene una dimensión, no necesita especificarla en cada sabor. Solo la primera flavorDimensions "default"línea de arriba es todo lo que se necesita.
Graham Borland
1
@GrahamBorland gracias por la pista, actualicé la respuesta en consecuencia.
tknell
1
puede que añadir, que el archivo esapp/build.gradle
spedy
60

Después de intentar leer detenidamente, lo resolví yo mismo. La solución es agregar la siguiente línea en build.gradle.

saborDimensiones "versionCode"

android { 
       compileSdkVersion 24
       .....
       flavorDimensions "versionCode"
} 
Omkar Nath Singh
fuente
2
¿Dónde en el gradle agrega esta línea? Sería útil un poco más de contexto
Brando Madden
2
Dentro del archivo build.gradle, en Android {...}
Omkar Nath Singh
android {compileSdkVersion 24 .... // agregar aquí}
Omkar Nath Singh
16
¿Por qué "versionCode" y nada más? ¿afectará versionCode de todos modos?
MBH
1
@MBH Tengo eso en mi producto Flavours. Solo necesita una clave única para identificarse.
Omkar Nath Singh
40

Aquí puede resolver este problema, debe agregar flavourDimension con el nombre de productFlavors y también debe definir la dimensión, consulte el siguiente ejemplo y para obtener más información, consulte 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
fuente
19

Si no desea usar dimensiones, debe usar esta línea

android { 
compileSdkVersion 24

...
flavorDimensions "default"
...
}

pero si desea usar dimensiones, primero debe declarar su nombre de dimensión y luego usar este nombre después de que ESTE ejemplo sea de las documentaciones:

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
fuente
9

He usado flavourDimensions para mi aplicación en build.gradle (Módulo: aplicación)

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

Mira este enlace para más información

// 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
fuente
0

Si tiene sabores simples (gratis / pro, demo / completo, etc.), agregue al archivo build.gradle:

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

Por dimensiones puede crear "sabores en sabores". Leer más .

Estilo-7
fuente