特定风味的变体是如何工作的?
How the flavor-specific variants are working?
如果您需要口味,您应该去 build gradle
并添加您需要的口味
像这样
productFlavors {
mock {
applicationIdSuffix = ".mock"
}
prod {}
}
然后你需要像这样创建相应的目录/src/prod/java/
我认为它应该如何工作,例如根据选择的构建变体 prodDebug
androidStudio 将作为基础主要源并根据选择的构建变体从目录中替换相应的 类。
但后来我发现了下面的片段
Files in the flavor-specific folders do not replace files in the main source set. Trying to do that will result in a duplicate class exception. This is a common misconception because it's how resources are merged.
main
源集中的代码将始终进入 APK。只有使用正确的构建变体,其他源集中的源文件才会被合并。例如,您可以创建两个文件:
- src/mock/java/yourpackage/MyClass.java
- src/prod/java/yourpackage/MyClass.java
根据您构建的是 prod
还是 mock
变体,其中一个 类 将与 APK 一起编译和打包。同样适用于 debug
和 release
:您可以拥有仅打包到应用程序的调试或发布版本中的代码和资源。
好的,通过基本的风格配置,你有两种种类的源集:
main
源集
- 风味特定 来源集,例如您的
mock
和 prod
使用标准 buildTypes
配置(debug 和 release),这将为您提供以下 build variants(构建类型和产品风格的组合):
- 模拟调试
- 模拟发布
- 产品调试
- 产品发布
它们中的每一个都使用与 flavor/type 名称 和 主集相对应的每个源集,例如 prodRelease 将立即使用以下所有源集:
- /src/main
- /src/prod
- /src/release
实际上,构建系统会将所有这些 'merge' 放入一个源集中,这意味着如果这些集中有 class 个具有相同路径和名称的元素,则会发生名称冲突编译器将失败。
正确使用源集的方法是从 main 集中省略每个集需要不同的 class,而是提供它每种口味/每种构建类型的所有集合,例如:
- main 集有 class A.java 引用 class B.java。 B.java 从主集中省略。
- 不同的 B.java 文件包含在 mock 和 prod 集合中(当然,不需要不同,但需要提供相同的接口,最好是main集合中包含的接口。
- 编译器使用当前配置所使用的集合中的 B.java - 构建变体,因此 mock 或 prod 一个。
- 耶!现在您有两种功能不同的产品口味。
此行为不限于 classes,您可以使用 flavor 或类型特定的资源、AndroidManifest.xml 文件以及任何可以使用的东西进入源目录。
提示:在 Android Studio 中,您可以在 'project files' 部分看到将选择哪些文件来编译特定变体。要切换构建变体,请按 Cmd+Shift+A(mac 键盘映射)并搜索 Build Variants 短语。它通常也显示在 Android Studio window.
的左下角
如果您需要口味,您应该去 build gradle
并添加您需要的口味
像这样
productFlavors {
mock {
applicationIdSuffix = ".mock"
}
prod {}
}
然后你需要像这样创建相应的目录/src/prod/java/
我认为它应该如何工作,例如根据选择的构建变体 prodDebug
androidStudio 将作为基础主要源并根据选择的构建变体从目录中替换相应的 类。
但后来我发现了下面的片段
Files in the flavor-specific folders do not replace files in the main source set. Trying to do that will result in a duplicate class exception. This is a common misconception because it's how resources are merged.
main
源集中的代码将始终进入 APK。只有使用正确的构建变体,其他源集中的源文件才会被合并。例如,您可以创建两个文件:
- src/mock/java/yourpackage/MyClass.java
- src/prod/java/yourpackage/MyClass.java
根据您构建的是 prod
还是 mock
变体,其中一个 类 将与 APK 一起编译和打包。同样适用于 debug
和 release
:您可以拥有仅打包到应用程序的调试或发布版本中的代码和资源。
好的,通过基本的风格配置,你有两种种类的源集:
main
源集- 风味特定 来源集,例如您的
mock
和prod
使用标准 buildTypes
配置(debug 和 release),这将为您提供以下 build variants(构建类型和产品风格的组合):
- 模拟调试
- 模拟发布
- 产品调试
- 产品发布
它们中的每一个都使用与 flavor/type 名称 和 主集相对应的每个源集,例如 prodRelease 将立即使用以下所有源集:
- /src/main
- /src/prod
- /src/release
实际上,构建系统会将所有这些 'merge' 放入一个源集中,这意味着如果这些集中有 class 个具有相同路径和名称的元素,则会发生名称冲突编译器将失败。
正确使用源集的方法是从 main 集中省略每个集需要不同的 class,而是提供它每种口味/每种构建类型的所有集合,例如:
- main 集有 class A.java 引用 class B.java。 B.java 从主集中省略。
- 不同的 B.java 文件包含在 mock 和 prod 集合中(当然,不需要不同,但需要提供相同的接口,最好是main集合中包含的接口。
- 编译器使用当前配置所使用的集合中的 B.java - 构建变体,因此 mock 或 prod 一个。
- 耶!现在您有两种功能不同的产品口味。
此行为不限于 classes,您可以使用 flavor 或类型特定的资源、AndroidManifest.xml 文件以及任何可以使用的东西进入源目录。
提示:在 Android Studio 中,您可以在 'project files' 部分看到将选择哪些文件来编译特定变体。要切换构建变体,请按 Cmd+Shift+A(mac 键盘映射)并搜索 Build Variants 短语。它通常也显示在 Android Studio window.
的左下角