Build Variants 构建变体
在Build Variants面板中当前模块的所有可用变体变体组合规则ProductFlavor BuildType其中BuildType默认有debug、release。多维度变体组合维度定义与组合通过flavorDimensions实现多维度变体如版本地区flavorDimensions version, areaproductFlavors {free { dimension version }paid { dimension version }domestic { dimension area }overseas { dimension area }}生成变体示例变体名称组合规则freeDomesticReleasefree版本 domestic地区 Release类型freeOverseasDebugfree版本 overseas地区 Debug类型paidODomesticDebugpaid版本 domestic地区 Debug类型源集类型main 源集包含了所有其他构件变体共用的代码和资源即所有的其他构建变体src/main是其共同拥有的。其他源集目录为可选项如果想要为某个单独的构建变体添加特有的代码或者资源可以创建对应的目录。变体专属资源需放置在对应目录如src/freeRelease/res/变体目录与main目录平级。资源优先级当存在重复的资源时Gradle 将按以下优先顺序决定使用哪一个文件左侧源集替换右侧源集的文件和设置构建变体 构建类型[BuildType] 产品风味[ProductFlavor] 主源集[main] 库依赖项。java/ 目录中的所有源代码将一起编译以生成单个输出。注意的是java文件是不能被覆盖的如果在main目录中创建了src/main/Utility.java那么是不能其他源集目录中定义同名文件进行覆盖的因为Gradle 在构建过程中会查看这两个目录并抛出“重复类”错误。如果想要在不同的 build 类型有不同版本的 Utility.java只能让每个 build 类型定义各自的文件版本。所有Manifest都将合并为一个清单。合并的优先级和上面提到的一致。同样values/ 目录中的文件也会合并在一起。如果两个文件同名例如存在两个 strings.xml 文件按照上述的优先级覆盖。res/ 和 asset/ 目录中的资源会打包在一起。最后在构建 APK 时Gradle 会为库模块依赖项随附的资源和清单指定最低优先级。源集过滤sourceSets {main {java {exclude ‘com/cooke/library/Test.java’exclude ‘com/cooke/library/model/**.java’}}}上面例子提到其他的源集目录无法覆盖同名java文件但是可以通过SourceSet对main目录中的java进行exclude。注意include和exclude不能对res生效如果想要对res进行过滤需要通过定义res/raw/keep.xml。重命名apk文件遍历applicationVariant或libraryVariant列表干预构建apk和aar的过程。最常见的就是重命名apk的名称android.applicationVariants.all {variant -variant.outputs.all {outputFileName“{applicationId}_̲{buildType.name}_{versionName}_̲{releaseTime()}.apk”}}定制依赖Build TypeProduct Flavor也能够有它们自己的依赖关系。比如使用flavor来生成一个基于广告的应用版本和一个付费的应用版本当中广告版本依赖于一个广告SDK。dependencies { flavor1Compile ... }定制权限在风味目录下单独定制AndroidManifest.xml。定义常量在gradle.properties文件中可以定义常量例如isMoudletrue然后在Android项目中的任何一个build.gradle文件中都可以把gradle.properties中的常量读取出来通过读取这个常量的值来判断开发模式例如if (isModule.toBoolean()) {manifest.srcFile src/main/module/AndroidManifest.xml} else {manifest.srcFile src/main/AndroidManifest.xml}美团walle、腾讯VasDolly...等的多渠道打包插件