1. 程式人生 > >Flavor 'xxxx' has unknown dimension 'app'.和Unable to load class 'org.gradle.api.internal.compo

Flavor 'xxxx' has unknown dimension 'app'.和Unable to load class 'org.gradle.api.internal.compo

Flavor ‘xxxx’ has unknown dimension ‘app’.

android studio 3.0,更新

classpath ‘com.android.tools.build:gradle:3.0.0’以後,出現報錯

Error:All flavors must now belong to a named flavor dimension.
The flavor ‘flavor_name’ is not assigned to a flavor dimension.

報錯的原因:檢視給出的連結地址:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#apply_plugin

The plugin now requires that all flavors belong to a named flavor dimension—even if you intend to use only a single dimension. Otherwise, you will get the following build error:
意思大致說,這個3.0的外掛要求flavor dimension必須要有,哪怕只有一個維度也要宣告, flavorDimensions 是在android{}中的欄位:可以理解成維度,比如下面只聲明瞭一個渠道的維度,

flavorDimensions “channel”
//渠道
productFlavors {

    qh360 {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
        dimension "channel"
    }
    baidu {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        dimension "channel"
    }

}

關於flavorDimensions 可以生成多維度,比如下面的程式碼

// 兩個維度
flavorDimensions “isFree”, “channel”

productFlavors {
free {
// 免費和付費用isFree做標識,小米和htc為釋出到的平臺用channel做標識,因而最後生成4
//種flavor,加上buildtype就是4*2=8種
dimension “isFree”

}

paid {
  dimension "isFree"
  ...
}

xiaomi{
    dimension "channel"
    ...
}

htc{
    dimension "channel"
    ...
}

}

其實就是在3.0外掛以後,google要求必須新增這個flavorDimensions 這個欄位哪怕是隻有一個維度也要寫上才不報錯,
然後看到stackoverflow上的回答更簡單的使用如下:

android {

defaultConfig {

    flavorDimensions 'default'
}

或是:

android {

defaultConfig {

    flavorDimensions 'versionCode'
}

針對Unable to load class ‘org.gradle.api.internal.compo

classpath ‘com.novoda:bintray-release:0.4.0’改成最新(當前是0.8),
然後還有就是依賴其他專案版本的問題,統一管理。
//統一管理
ext {
var = [
minSdkVersion : 19,
targetSdkVersion : 27,

        compileSdkVersion   : 27,
        buildToolsVersion   : "27.0.2",

        versionName         : "2.9.2",
        versionCode         : 292,

        supportVersion      : "27.1.1",

        okhttploggingVersion: '3.8.1',
        okhttpVersion       : '3.8.1',
        retrofitVersion     : '2.4.0',

        rxjavaVersion       : '2.1.12',
        rxandroidVersion    : '2.0.2',

]

}
這種多渠道,以及依賴專案。Android studio建議用正式版,別急著嚐鮮我的版本是3.14.
希望對你有所幫助,紙上得來終覺淺,書到用時方恨少。