尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Build Variants 构建变体

Build Variants 构建变体
📅 发布时间:2026/7/10 1:22:56

在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'
}

美团(walle)、腾讯(VasDolly)...等的多渠道打包插件

相关新闻

  • 2026常州及周边文信授权全屋定制商家实测盘点 - 互联网科技品牌测评
  • 【0基础嵌入式学习日志】Day15:位操作、GPIO 寄存器模拟与 LED 控制
  • 伯爵中国官方售后服务中心|服务电话及完整官方地址权威信息声明(2026年7月更新) - 亨得利官方服务中心

最新新闻

  • 51单片机温度报警系统优化:3种软件滤波算法对比与阈值防抖设计
  • eNSP--防火墙
  • C++ stringstream 性能陷阱:3种字符串拼接方案对比与10万次循环实测
  • STM32智能家居机智云
  • 潍坊寒亭区开元街道亨得利官方名表服务中心电话公示(2026年7月最新) - 亨得利钟表维修中心
  • 菏泽吃住一体化体态营怎么挑

日新闻

  • OpenClaw本地化部署:xParse文档解析引擎实战指南
  • 蓝牙 5.4 协议栈深度解析:从 HCI 到 L2CAP 的 7 层数据流
  • PyTorch nn.CrossEntropyLoss 实战:3种权重设置与标签平滑对比(附代码)

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号