情況1:
app中有某個build type
但module中沒有
// In the app's build.gradle file.
android {
buildTypes {
debug {}
release {}
staging {
// 下面[]中的qa偶翅、debug乘盖、release是module中配置的buildType,必須含有其中一個或更多艘包,
// 若module中buildType沒有staging渴邦,gradle會根據(jù)matchingFallbacks的配置,
// 依次按順序去匹配
// 注意:module與module之間存在依賴關(guān)系的話,也要在特定的build types中指定匹配關(guān)系
matchingFallbacks = ['qa', 'debug', 'release']
}
}
}
注意:module中有但app中沒有的build type
是不會報錯的迄委,因?yàn)間radle插件根本不會去module中請求build type
。
情況2:
在app和它的module中都有同一個維度(比如:flavorDimensions 'tier'
)类少,但你的app有的flavors在module中沒有
flavorDimensions 'tier'
productFlavors {
paid {
// 因?yàn)橐蕾嘺pp的module在'tier'維度下也有'paid'這個flavor跑筝,所以你不用去管,
// gradle會自動為你匹配
dimension 'tier'
}
free {
// 因?yàn)閙odule在'tier'維度下沒有'free'這個flavor瞒滴,所以需要指定matchingFallbacks
// 讓gradle知道怎么去匹配
// 像下面這樣配置曲梗,gradle會按順序依次去匹配module中'tier'維度下的flavor赞警,
// 直到匹配到,否則會報錯
matchingFallbacks = ['demo', 'trial']
}
}
注意:對于在同一個維度下虏两,module中有的flavors但app中沒有是不會報錯的愧旦,因?yàn)間radle插件根本不會去module中請求flavors。
情況3:
module中有某個dimension維度定罢,但app中沒有
// In the app's build.gradle file.
android {
defaultConfig{
// 下面這句話告訴gradle笤虫,當(dāng)遇到一個module中有個app中沒有的'minApi'維度時,
// 它應(yīng)該按照下面這個順序去匹配這個維度的flavors
missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'
// 若其他module中還有更多app中沒有的維度祖凫,你必須為所有的維度定義回退策略
missingDimensionStrategy 'abi', 'x86', 'arm64'
}
flavorDimensions 'tier'
productFlavors {
free {
dimension 'tier'
// 你可以在一個特定的flavor中覆蓋defaultConfig的配置
missingDimensionStrategy 'minApi', 'minApi23', 'minApi18'
}
paid { }
}
}
注意:當(dāng)一個維度app中有但module中沒有的時候是不會報錯琼蚯,因?yàn)間radle插件只會匹配已經(jīng)在module中存在的維度,比如module中沒有abi
這個維度惠况,當(dāng)app為freeX86Debug
時遭庶,你的module就用freeDebug
。
missingDimensionStrategy
方法其他屬性可以參考官方文檔稠屠。
情況4:
若module中沒有某個dimension峦睡,則app不需要在這個dimension下做任何處理
其他:
1、排除掉某些不需要的變體
variantFilter { variant ->
def names = variant.flavors*.name
def types = variant.buildType.name
if (names.contains("abi") && types == "debug") {
// Gradle ignores any variants that satisfy the conditions above.
setIgnore(true)
}
}