Android 编译配置

855 阅读3分钟

源代码集

Android Studio 按逻辑关系将每个模块的源代码和资源分组为源代码集。模块的 main/ 源代码集包含其所有构建变体共用的代码和资源。其他源代码集目录是可选的,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录。不过,创建类似于 main/ 的源代码集有助于组织 Gradle 仅在构建特定应用版本时才应使用的文件和资源:

src/main/ 此源代码集包含所有构建变体共用的代码和资源。 src/buildType/ 创建此源代码集可加入特定构建变体专用的代码和资源。 src/productFlavor/ 创建此源代码集可加入特定产品变种专用的代码和资源。 注意:如果配置构建以组合多个产品变种,则可以为变种维度之间的每个产品变种组合创建源代码集目录:src/productFlavor1ProductFlavor2/

src/productFlavorBuildType/ 创建此源代码集可加入特定构建变体专用的代码和资源。 例如,如需生成应用的“fullDebug”版本,构建系统需要合并来自以下源代码集的代码、设置和资源:

src/fullDebug/(构建变体源代码集) src/debug/(构建类型源代码集) src/full/(产品变种源代码集) src/main/(主源代码集)

源代码集合并

Android Studio 按逻辑关系将每个模块的源代码和资源分组为源代码集。模块的 main/ 源代码集包含其所有构建变体共用的代码和资源。其他源代码集目录是可选的,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录。不过,创建类似于 main/ 的源代码集有助于组织 Gradle 仅在构建特定应用版本时才应使用的文件和资源:

src/main/ 此源代码集包含所有构建变体共用的代码和资源。 src/buildType/ 创建此源代码集可加入特定构建变体专用的代码和资源。 src/productFlavor/ 创建此源代码集可加入特定产品变种专用的代码和资源。 注意:如果配置构建以组合多个产品变种,则可以为变种维度之间的每个产品变种组合创建源代码集目录:src/productFlavor1ProductFlavor2/

src/productFlavorBuildType/ 创建此源代码集可加入特定构建变体专用的代码和资源。 例如,如需生成应用的“fullDebug”版本,构建系统需要合并来自以下源代码集的代码、设置和资源:

src/fullDebug/(构建变体源代码集) src/debug/(构建类型源代码集) src/full/(产品变种源代码集) src/main/(主源代码集)

过滤变体

Gradle 会为您配置的产品变种和构建类型的每种可能组合创建一个构建变体。不过,某些构建变体可能并不是您需要的,或者对于您的项目来说没有意义。您可以在模块级 build.gradle 文件中创建变体过滤器,以移除某些构建变体配置。

以上一部分中的构建配置为例,假设您打算让“demo”版应用仅支持 API 级别 23 及更高级别。您可以使用 variantFilter 代码块过滤掉所有将“minApi21”和“demo”产品变种组合在一起的构建变体配置:

android {
  ...
  buildTypes {...}

  flavorDimensions "api", "mode"
  productFlavors {
    demo {...}
    full {...}
    minApi24 {...}
    minApi23 {...}
    minApi21 {...}
  }

  variantFilter { variant ->
      def names = variant.flavors*.name
      // To check for a certain build type, use variant.buildType.name == "<buildType>"
      if (names.contains("minApi21") && names.contains("demo")) {
          // Gradle ignores any variants that satisfy the conditions above.
          setIgnore(true)
      }
  }
}
...

developer.android.com/studio/buil… developer.android.com/studio/buil…