记一次对Gradle同一项目变种版本的配置

首先因为公司对某个项目有打不同版本apk包的需求;要是分开维护的话 灰常麻烦;只能在Gradle中通过类似打不同版本包的形势完成了该需求。下面简单解说下 在这过程中踩过的坑。

主要靠productFlavors

一个product flavor定义了从项目中构建了一个应用的自定义版本。一个单一的项目可以同时定义多个不同的flavor来改变应用的输出。

这个设计是为了解决不同的版本之间的差异非常小的情况。虽然最项目终生成了多个定制的版本,但是它们本质上都是同一个应用,那么这种做法可能是比使用库项目更好的实现方式。

Product flavor需要在productFlavors这个DSL容器中声明:

android {  
    ....  

    productFlavors {  
        defaultPublishConfig "flavor1"
        publishNonDefault true
        flavor1 {  
            ... 
            //此处可以 定义 applicationId,来实现不同版本装在同一个手机的需求
            //manifestPlaceholders 可以定义一些常量来实现AndroidManifest.xml不同的配置
            // 可以通过 buildConfigField "String", "NAME", "\"小明\"" 通过BuildConfig.NAME获取
        }  

        flavor2 {  
            ...  
        }  
    }  
} 

在这个地儿有个坑 当你这个model是做完lib被引用时候 必须指定 defaultPublishConfig “XXXXX”; 否则会出现引用该库是类都找不到的问题

基本原则
通过 android.defaultPublishConfig修改默认的发布配置
通过 android.publishNonDefault = true 启用其他variants的发布
通过 compile project(path: ‘:project’, configuration: ‘flavor1Debug’) 引用指定的variant(备注当通过这种方式引用的时候 对应的库可以不配置 defaultPublishConfig)

而主应用则不用配置defaultPublishConfig;方便手动切。暂且就这么点过多的就不在此详述了。

这里写图片描述

哎对了 各种尝试的过程中还发现个这样有趣的问题

def name = ""
android {  
    ....  
    productFlavors {  
        defaultPublishConfig "flavor1"
        publishNonDefault true
        flavor1 {  
            ... 
            name = "小明"
        }  

        flavor2 {  
            ...  
            name = "小红"
        }  
    }  
} 

println "the name is $name"

这时候不管怎么切换版本 都会输出小红;productFlavors 中flavor中代码都会执行 是覆盖关系…

——————————————————分割线——————————————————

额 又想到先 可以补充的 针对不同版本依赖不同库文件的时候 可以通过这种方式来应对

flavor1compile project(path: ':project', configuration: 'flavor1Debug')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值