Gradle Cheat Sheet (15): Flavors

1. Declaring Flavors

  除了使用Build Type,也可以使用Product Flavor来对build进行定制。Product Flavor一般用于创建提供给用户的不用应用版本,比如免费版和付费版。

  Anroid插件不会自动创建默认的Product Flavor。要创建Product Flavor,只需在 productFlavors {} 块中进行定义,如:

这里创建了 free 和 paid 两个Flavor,并分别提供了唯一的 applicationId ,这样就可以在一台设备上同时安装这两个版本的应用。

  在Build Variants面板可以选择构建时所使用的Flavor,如图1所示。

图1

图1

  创建Flavor之后,Android插件会自动为Flavor创建同名的Source Set,可以为不同的Flavor添加不同的代码和资源。例如上面创建了名为 free 的Flavor,其对应的专用代码和资源分别放在src/free/java和src/free/res,Gradle会自动根据Flavor从对应的文件夹下获取代码。如在src/main/res/values/strings.xml下加入:

在src/free/res/values/strings.xml中加入

在src/paid/res/values/strings.xml下加入

在应用中把这个字符串显示出来,就可以看到对于使用不同的Flavor构建的App,会显示出不同的字符串。

  除了为Flavor添加专用的代码,还可以对Flavor进行单独的配置,所有位于 defaultConfig { } 块下的配置都可以放在Flavor的配置块下,如设置 paid 的 minSdkVersion 为23:

  本部分代码见这里

2. Flavor-Specific Dependencies

  Gradle会为Flavor生成对应的Configuration,Configuration的名称以Flavor的名称作为前缀。通过Flavor的Configuration,就可以为不同的Flavor添加不同的依赖,如:

freeCompile 是对应free Flavor的Configuration,这里为 free Flavor添加依赖:

非特定Flavor的依赖对全部Flavor有效,如开头两行的:

对之前定义的 free 和 paid 两个Flavor都有效。

  本部分代码见这里