浅谈Android Variants(Android变体)

如果现在有这样一个需求:一个App里面所有用到地图的地方,在国内用高德地图 (或者百度),在国外用Google Map(包括香港澳门)。

其实类似这样的需求是经常会碰到的,再比如国内推送用友盟(或者信鸽、极光),国外用GCM(或者Firebase,反正是谷爹原生的)。

实现这样的需求或许有很多方式,构建Android变体就是很好的选择,直接上图吧
这里写图片描述

这张图可以分开三部分来看,先来看看项目的结构,在src文件夹下面有cn、hk、main三个文件夹,main是我们最熟悉不过的了,就是整个项目代码的主体部分,而cn和hk就是用Gradle构建出来的Android变体了,可以在cn和hk文件夹里实现文章开头的需求代码;

再来看看右边的Gradle,productFlavors里面同样有cn和hk两部分,其实在src下面新建cn和hk文件夹之前,需要先在Gradle这里写好所需构建的变体名称,productFlavors里的变体名称要跟src下的文件夹名称对应好(包括大小写,当然用小写是比较规范的),其中applicationId就是不同变体的进程名了;

最后来看左下角的Build Variants,当做完前面两步后,打开这个Build Variants窗口,点击右边一栏Build Variants,就可以自由切换不同的变体进行开发,点击确定变体之后,AS会自动去把项目build一次,build完就可以愉快的按不同的变体进行开发了。

如果不同的变体需要用到不同的框架或者第三方的东西咋办?其实也很好办,直接上图就懂了
这里写图片描述

compile对应main文件夹,cnCompile对应cn文件夹,hkCompile对应hk文件夹,是不是很方便嘞

最后再说一点,如果项目中的MainActivity有某个button,在国内这个button的颜色是黄色,在国外是黑色,那么是不是要在cn、hk、main三个文件夹都要有这个MainActivity的layout#xml文件,然后分别去修改这个button的background呢?

答案是否定的,我们可以给这个button写一份drawable文件分别放在cn、hk、main的res下面(注意这个drawable在三个文件夹中的名字都是一样的!),然后button的background就引用这份drawable文件,而MainActivity的layout#xml则只需要放在main文件夹里就好,这样就可以达到同一个button不同变体不同颜色的效果了;
这是因为cn和hk中的res文件会自动覆盖main中的res文件(前提是res里的文件名字要相同)

简单来说,变体就相对于一个单独的App,只是不同的变体同时存在于一个项目中。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值