android gradle flavorDimension的使用

先从字面来解读flavorDimension,flavor翻译为口味、特点,在gradle中用来实现不同的渠道包(可能packageName不一样,可能版本号,and so on),Dimension翻译为维度,flavorDimension就翻译成渠道的维度吧。先看一段代码:

android { ... flavorDimensions "releaseType", "market" productFlavors { free { flavorDimension "releaseType" } pro { flavorDimension "releaseType" } china { flavorDimension "market" } global { flavorDimension "market" } } }

因为网上对于flavorDimension的资料是在太少,所以只能根据代码运行情况来分析作用了。

执行gradlew assembleRelease命令(linux/Mac下为./gradlew assembleRelease)


在build/outputs/apk下共生成了4个apk文件(都是unsigned的原因是我没有设置签名),分别为:

app-free-china-release-unsigned.apk

app-free-global-release-unsigned.apk

app-pro-china-release-unsigned.apk

app-pro-global-release-unsigned.apk

现在就大概明白了,

flavorDimensions "releaseType", "market"

这样定义了两个维度,第一个为releaseType,意思为打包类型,比如收费的还是免费的,或者部分收费。第二个为market,国内市场,还是全球市场,还是美国市场

productFlavors { free { flavorDimension "releaseType" } pro { flavorDimension "releaseType" } china { flavorDimension "market" } global { flavorDimension "market" } }

再定义了4个渠道,渠道free和pro都属于releaseType维度,一个为免费,一个为收费。china和global都属于第二维度market,中国市场和全球市场。

为什么要这么定义呢?很容易想到中国市场china有free和pro版本,国际市场global也有free和pro版本,而china和global可能支付方式不一样或者其他不一样。

现在大概都明白flavorDimension该怎么用了吧?

另外网上还看到这种写法

android { ... flavorDimensions "releaseType", "market" productFlavors { free { flavorDimension "releaseType" } pro { flavorDimension "releaseType" } china { flavorDimension "market" } global { dimension "market" } } }

没有使用flavorDimension,而是使用dimension,经过实验后发现和上面的效果完全一样,可能是dimension是以前的写法,为了向下兼容所以dimension也行,明显flavorDimension更简明易懂