如果现在有这样一个需求:一个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,只是不同的变体同时存在于一个项目中。

更多相关文章

  1. 在Android中调用WebService实例
  2. 配置vim开发Android[神器终究是神器]
  3. 使用ant优化android项目编译速度,提高工作效率
  4. android音频裁剪(2)——Wav裁剪
  5. Android(安卓)apk系列2-------系统签名(生成release版本的系统)
  6. 【Android(安卓)ApkTool 反编译获取源码】下载一个apk,然后获取
  7. IDA 调试 Android(安卓)方法及简单的脱壳实现
  8. DEX 文件和APK 加载
  9. 从实际问题中分析 Android中@id与@+id区别

随机推荐

  1. Android——Bitmap的加载和Cache
  2. 於 Intel® 架構加速 Android* 模擬器
  3. [入门二]Android中各种JAVA包的功能描述
  4. 智能电视使用什么操作系统?
  5. Android(安卓)Looper和Handler分析
  6. Android应用层源码阅读笔记--Application
  7. 帮你分析android与java的关系
  8. 在Android中建立Android project没有R.ja
  9. Android主题更换换肤
  10. android下的定时器在关闭屏幕后会自己停