基于其他风味的 Gradle 风味

bmo*_*oij 5 android gradle android-productflavors

有没有可能一种味道是基于另一种味道的?

例如 构建.gradle:

productFlavors {
    flavor1 {
        flavorBase "main"
    }
    flavor2 {
        flavorBase "main"
    }
    flavor3 {
        flavorBase "main"
    }
    flavor4 {
        flavorBase "flavor3"
    }
    flavor5 {
        flavorBase "flavor3"
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Pet*_*ter 4

我遇到了同样的问题,需要一些基本风味和从中继承的两种风味。

经过几个小时的尝试后,我最终得到的最佳解决方案是:

  1. 创建其他口味(口味 4 和 5),与创建口味 1 和 2 的方法相同。
  2. 为这些创建文件夹,并为通用代码/资源创建一个基本文件夹(例如,命名为flavor 3;与您为其他flavor 所做的操作相同)。
  3. 现在为您的子口味定义额外的源集

    flavor4 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor4/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor4/java']
    }
    flavor5 {
        res.srcDirs = ['src/flavor3/res', 'src/flavor5/res']
        java.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
        resources.srcDirs = ['src/flavor3/java', 'src/flavor5/java']
    }
    
    Run Code Online (Sandbox Code Playgroud)

因此,在flavor3(从这个意义上说,它不是一种flavor,但我保留原来的命名)中,您可以定义通用代码和资源。唯一的缺点是,基文件夹和子文件夹中不可能有相同的类。