Build Variants 构建变体

本文介绍了AGG(Anti-Grain Geometry),一个高效且开源的2D图形库。AGG专注于提供高质量的几何图形绘制功能,并在其官方网站http://www.antigrain.com/上提供了详细的技术文档和使用指南。

在Build Variants面板中,当前模块的所有可用变体

变体组合规则: ProductFlavor + BuildType ,其中BuildType默认有debug、release。

多维度变体组合

维度定义与组合

通过flavorDimensions实现多维度变体(如版本+地区):

flavorDimensions "version", "area"

productFlavors {

        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 Type,Product Flavor也能够有它们自己的依赖关系。比如,使用flavor来生成一个基于广告的应用版本和一个付费的应用版本,当中广告版本依赖于一个广告SDK。

    dependencies {
        flavor1Compile "..."
    }

定制权限

在风味目录下单独定制AndroidManifest.xml。

定义常量

在gradle.properties文件中可以定义常量,例如

isMoudle=true

然后在Android项目中的任何一个build.gradle文件中都可以把gradle.properties中的常量读取出来,通过读取这个常量的值来判断开发模式,例如:

if (isModule.toBoolean()) {
        manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
        manifest.srcFile 'src/main/AndroidManifest.xml'
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值