需求
针对于不同的渠道开发做不同的逻辑。不同的渠道不需要对方的依赖。
当前情况
持续集成、代码量、依赖的复杂程度。以及后续的开发维护。不希望进行多分支开发。
思考
gradle 可以针对不同的渠道选择不同的代码 ,并且可以指定依赖 。
实现
不同的依赖注定了代码会不同,gradle为我们指定了sourceSet。
我现在要维护两个渠道:flavorsa
、flavorsb
现在来修改app.gradle
productFlavors {
flavorsa {}
flavorsb {}
}
渠道我们已经建立,现在区分代码:
- app or base 的 module 中我们创建于main平级的文件夹
flavorsa
、flavorsb
![](https://img.haomeiwen.com/i1955940/58e4ceba1d7d6815.png)
指定代码我们就单纯处理创建java
即可,文件目录与main中相同。资源文件就创建res
,其他同理。强调一下渠道的文件目录与文件名需要一致。
flavorsa/java/com/xxx/xxx/agent/FlavorsAgent.kt
flavorsb/java/com/xxx/xxx/agent/FlavorsAgent.kt
代码分离后,我们来分离一下依赖包。
dependencies {
flavorsaApi project(':liba')
flavorsbApi project(':libb')
}
我们可以看到不同的渠道通过不同的渠道Api即可进行区分,b渠道此时无法使用liba中的功能。a渠道同理。
使用方法:
定义接口IFlavorsAgentInterface
。在FlavorsAgent
写实现方法。通过java的多态性进行开发即可。
网友评论