Problema de dimensão de sabor do Android Studio 3.0

224

Atualizado para a compilação do Studio Canary. Meu projeto anterior do Telegram Messenger está dando o seguinte erro.

Erro: agora todos os sabores devem pertencer a uma dimensão de sabor nomeada. O sabor 'armv7' não está atribuído a uma dimensão de sabor. Saiba mais em https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

O que devo fazer? Eu já vi esse link, mas não conseguia entender o que fazer. Eu tenho 3 variantes de compilação agora, lançamento, depuração e foss.

Omkar Nath Singh
fonte

Respostas:

528

Se você realmente não precisa do mecanismo, basta especificar uma dimensão de sabor aleatória em build.gradle:

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

Para mais informações, consulte o guia de migração

tknell
fonte
1
Obrigado. Eu já tinha uma dimensão "versionCode", usei isso.
Omkar Nath Singh
2
flavorDimensions "versionCode" productFlavors {debug {dimension "default" versionName "1.0"} release {dimension "default" versionName "1.0"} foss {dimension "default" versionName "1.0"}} Eu recebi esse erro .. Os nomes dos produtosFlavor não podem colidir com nomes BuildType. Poderia, por favor, alguém me ajudar. Eu tenho esse erro AS 3.0 versão beta Canary com Kotlin.
Md Maidul Islam
5
Se você tiver apenas uma dimensão, não precisará especificar em cada sabor. Apenas a primeira flavorDimensions "default"linha acima é tudo o que é necessário.
Graham Borland
1
@GrahamBorland obrigado pela dica, atualizei a resposta de acordo.
tknell
1
talvez acrescentar, que o arquivo éapp/build.gradle
spedy
60

Depois de tentar ler com atenção, eu mesmo resolvi. A solução é adicionar a seguinte linha em build.gradle.

flavorDimensions "versionCode"

android { 
       compileSdkVersion 24
       .....
       flavorDimensions "versionCode"
} 
Omkar Nath Singh
fonte
2
onde no gradle você adiciona esta linha? Um pouco de contexto mais seria útil
Brando Madden
2
Arquivo build.gradle dentro, no android {...}
Omkar Nath Singh
android {compileSdkVersion 24 .... // acrescentar aqui}
Omkar Nath Singh
16
por que "versionCode" e nada mais? isso afetará o versionCode de qualquer maneira?
MBH
1
@ MBH Eu tenho isso no meu produtoFlavours. Você só precisa de qualquer chave exclusiva para identificar.
Omkar Nath Singh #
40

Aqui você pode resolver esse problema, é necessário adicionar flavorDimension com o nome do productFlavors e também definir a dimensão, veja o exemplo abaixo e para obter mais informações, consulte aqui 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
fonte
19

Se você não quiser usar dimensões, use esta linha

android { 
compileSdkVersion 24

...
flavorDimensions "default"
...
}

mas se você quiser usar dimensões, declare primeiro o nome da sua dimensão e depois use esse nome depois que ESTE exemplo for das documentações:

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

Eu usei flavorDimensions para o meu aplicativo no build.gradle (Módulo: 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
    }
}

Verifique este link para mais informações

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

Se você possui sabores simples (gratuito / profissional, demo / completo etc.), adicione ao arquivo build.gradle:

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

Por dimensões, você pode criar "sabores em sabores". Leia mais .

Style-7
fonte