Android Gralde补全计划 productFlavors多渠道打包(变体/多客户)

在工作中,偶尔需要面对不同客户进行需求上的细微调整,变体可以方便地完成这种调整。

本文以实践为主,部分理论知识已略过,参考理论知识补在了下面参考文档中。

其中单变体适合 单产品对应不同客户,多变体适合 单产品对应不同客户且单个客户地某个需求存在不同版本

如:音乐app 单变体 适合需要对皮肤进行不同调整的多客户

多变体 适合需要对皮肤进行不同调整的多客户,且其中A客户需要网络播放流媒体歌曲/完全本地播放歌曲 两种不同app模式

注意:

main和变体的java文件不能存在同名,个人使用习惯是main下存放base文件,在不同变体下调整对应的需求。

1 单变体

在app下build.gradle添加变体相关配置代码,变体以channel为例

复制代码
// 产品变体名称,这里可以自行填写,channel为示例
flavorDimensions "channel"
// 创建产品变体
productFlavors {
    common {
        manifestPlaceholders = [CHANNEL: "common "]
        dimension = "channel"
        buildConfigField("String","CHANNEL","\"common \"")
    }
    meizu {
        manifestPlaceholders = [CHANNEL: "meizu "]
        dimension = "channel"
        buildConfigField("String","CHANNEL","\"meizu \"")
    }

}

在Build Variants调整到不同变体,并src下新建-文件夹-新建对应渠道地java/resources等资源

2 多变体

在app下build.gradle添加变体相关配置代码,变体以channel和wifi为例

c 复制代码
  // 产品变体名称
    flavorDimensions "channel","wifi"
    // 创建产品变体
    productFlavors {
       
  common {
            manifestPlaceholders = [CHANNEL: "common "]
            dimension = "channel"
            buildConfigField("String","CHANNEL","\"common \"")
        }
        meizu {
            manifestPlaceholders = [CHANNEL: "meizu "]
            dimension = "channel"
            buildConfigField("String","CHANNEL","\"meizu \"")
        }
        
        haswifi {
            dimension = "wifi"
        }
        wificlose {
            dimension = "wifi"
        }
    }

此时在Build Variants切换时会出现channel和wifi组合的variant,对应选择需要的即可。

参考

1理论知识 flavorDimensions和productFlavors------安卓gradle

https://juejin.cn/post/6844903968204652551#heading-4

2 实践 通过productFlavors实现多渠道打包

https://juejin.cn/post/7198806651562229816

3 实践 Android Gradle中的productFlavors

https://blog.csdn.net/nihaomabmt/article/details/119320732

相关推荐
消失的旧时光-19433 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs3 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&3 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
LDORntKQH3 小时前
基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2
android
冬奇Lab3 小时前
Android 15 ServiceManager与Binder服务注册深度解析
android·源码·源码阅读
2501_916008895 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
独行soc6 小时前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
常利兵6 小时前
2026年,Android开发已死?不,它正迎来黄金时代!
android
Risehuxyc7 小时前
备份三个PHP程序
android·开发语言·php
Doro再努力16 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim