Masalah Dimensi Flavour Android Studio 3.0

224

Diupgrade ke Studio Canary build. Proyek Telegram Messenger saya sebelumnya memberikan kesalahan berikut.

Kesalahan: Semua rasa sekarang harus memiliki dimensi rasa bernama. Rasa 'armv7' tidak ditugaskan untuk dimensi rasa. Pelajari lebih lanjut di https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

Apa yang harus saya lakukan? Saya sudah melihat tautan itu tetapi tidak mengerti apa yang harus dilakukan. Saya memiliki 3 varian versi sekarang, rilis, debug, dan fosil.

Omkar Nath Singh
sumber

Jawaban:

528

Jika Anda benar-benar tidak membutuhkan mekanismenya, cukup tentukan dimensi rasa acak di build.gradle:

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

Untuk informasi lebih lanjut, periksa panduan migrasi

tknell
sumber
1
Terima kasih. Saya sudah memiliki dimensi "versionCode", saya menggunakannya.
Omkar Nath Singh
2
flavourDimensions "versionCode" productFlavours {debug {dimensional "default" versionName "1.0"} rilis {dimensional "default" versionName "1.0"} foss {dimensional "default" versionName "1.0"}} Saya mendapatkan kesalahan ini ..Nama ProductFlavor tidak dapat bertabrakan dengan nama BuildType. Bisakah Anda tolong ada yang membantu saya. Saya mendapatkan kesalahan ini AS 3.0 versi beta Canary dengan Kotlin.
Md Maidul Islam
5
Jika Anda hanya memiliki satu dimensi, Anda tidak perlu menentukannya dalam setiap rasa. Hanya flavorDimensions "default"baris pertama di atas yang dibutuhkan.
Graham Borland
1
@GrahamBorland terima kasih atas petunjuknya, saya memperbarui jawabannya.
tknell
1
mungkin menambahkan, bahwa file tersebutapp/build.gradle
spedy
60

Setelah mencoba dan membaca dengan cermat, saya menyelesaikannya sendiri. Solusi adalah menambahkan baris berikut di build.gradle.

flavorDimensions "versionCode"

android { 
       compileSdkVersion 24
       .....
       flavorDimensions "versionCode"
} 
Omkar Nath Singh
sumber
2
di mana di gradle yang Anda tambahkan baris ini? Konteks yang sedikit lebih membantu
Brando Madden
2
Di dalam file build.gradle, di android {...}
Omkar Nath Singh
android {compileSdkVersion 24 .... // tambahkan di sini}
Omkar Nath Singh
16
mengapa "versionCode" dan bukan yang lain? apakah itu akan memengaruhi versionCode?
MBH
1
@MBH Saya memilikinya di productFlavour saya. Anda hanya perlu kunci unik untuk diidentifikasi.
Omkar Nath Singh
40

Di sini Anda dapat menyelesaikan masalah ini, Anda perlu menambahkan flavorDimension dengan nama productFlavours dan perlu mendefinisikan dimensi juga, lihat contoh di bawah ini dan untuk informasi lebih lanjut lihat di sini https://developer.android.com/studio/build/gradle-plugin- 3-0-0-migrasi.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
sumber
19

Jika Anda tidak ingin menggunakan dimensi, Anda harus menggunakan garis ini

android { 
compileSdkVersion 24

...
flavorDimensions "default"
...
}

tetapi jika Anda ingin menggunakan dimensi Anda harus mendeklarasikan nama dimensi Anda terlebih dahulu dan kemudian gunakan nama ini setelah contoh INI dari dokumentasi:

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

Saya telah menggunakan flavorDimensions untuk aplikasi saya di build.gradle (Modul: aplikasi)

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

Periksa tautan ini untuk info lebih lanjut

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

Jika Anda memiliki rasa sederhana (gratis / pro, demo / penuh dll.) Kemudian tambahkan ke file build.gradle:

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

Dengan dimensi Anda dapat membuat "rasa dalam rasa". Baca lebih lanjut .

Style-7
sumber