特定风味的变种如何起作用?

时间:2016-11-24 12:08:27

标签: java android android-gradle android-productflavors

如果你需要口味,你应该去build gradle并添加你需要的口味

喜欢这个

productFlavors {
mock {
  applicationIdSuffix = ".mock"
}
prod {}
}

然后你需要像/src/prod/java/

那样创建相应的目录

我认为它应该如何工作,根据选择的构建变体,例如prodDebug androidStudio将作为基本主要来源并根据选择的构建变体替换来自dir的相应类。

但后来我找到了下一个

的片段
  

特定于flavor的文件夹中的文件不会替换主源集中的文件。尝试这样做会导致重复的类异常。这是一种常见的误解,因为它是如何合并资源的。

2 个答案:

答案 0 :(得分:2)

好的,所以对于带有flavor的基本配置,你有两个的源集:

  1. main source set
  2. 特定于风格的源集,例如mockprod
  3. 使用标准buildTypes配置( debug 发布),这将为您提供以下构建变体(构建类型的组合)和产品口味):

    1. mockDebug
    2. mockRelease
    3. prodDebug
    4. prodRelease
    5. 它们中的每一个都使用与主要集合的风味/类型名称相对应的每个源集,例如, prodRelease 将使用以下所有来源立即设置:

      1. / SRC /主
      2. / SRC / PROD
      3. / SRC /释放
      4. 实际上,构建系统会将所有这些“合并”到一个源集中,这意味着如果这些集合中存在具有相同路径和名称的类,则会发生名称冲突,编译器将失败。

        正确使用源集的方法是省略 main 集中每个集需要不同的类,而是为每个flavor / each buildType提供所有集合,例如:

        1. main set具有引用类 B.java 的类 A.java 。主集中省略了B.java。
        2. 不同的 B.java 文件包含在 mock prod 集中(当然,不需要不同,但需要提供相同的界面,最好使用 main 集中包含的界面。)
        3. 编译器使用当前配置 - 构建变体使用的集合中的 B.java ,因此 mock prod 一个。
        4. 耶!现在,您有两种功能不同的产品口味。
        5. 此行为不限于类,您可以使用flavor或类型特定资源, AndroidManifest.xml 文件以及任何进入源目录的内容。

          提示:在Android Studio中,您可以在“项目文件”部分中看到将选择哪些文件进行特定变体的编译。要切换构建变体,请按Cmd + Shift + A(mac键映射)并搜索构建变体短语。它通常也显示在Android Studio窗口的左下方。

答案 1 :(得分:1)

来自main来源集的代码将始终进入APK。只有在使用正确的构建变体时,才会合并其他源集中的源文件。例如,您可以创建两个文件:

  • 的src /模拟/ JAVA / yourpackage / MyClass.java
  • 的src / PROD / JAVA / yourpackage / MyClass.java

根据您是否正在构建prodmock变体,其中一个类将与APK一起编译和打包。同样适用于debugrelease:您可以拥有仅打包到应用程序的调试版或发行版中的代码和资源。