问题:

一个product flavor不够,你需要另一个标准去区分不同版本的app

解决方案:

在product flavor中增加flavorDimensions

讨论:

在3.2章展示了一个有三个product flavor的app(arrogant,friendly,obsequious)。这几个flavor是基于态度区分。

然后不同的客户希望app有他们自己的烙印。代码大体上都是一样的。只有很小的一部分不一样。

为了防止大量的赋值黏贴,介绍下额外的flavor dimension。build file如下:

flavorDimensions 'attitude', 'client'
productFlavors {
arrogant {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.arrg'
}
friendly {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.frnd'
}
obsequious {
dimension 'attitude'
applicationId 'com.oreilly.helloworld.obsq'
}
stark {
dimension 'client'
}
wayne {
dimension 'client'
}
}

现在有两个不同维度的flavor:attitude和client。arrogant,friendly和obsequious是基于态度的,stark和wayne是对不同的客户。

这形成更多的变体。

为了让这些变体做些可见的事情,为每个客户 flavor新增目录结构,如下:

stark客户stark/res/values目录下的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="text_color">#beba46</color>
  <color name="background_color">#771414</color>
</resources>

wayne/res/values目录下的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="text_color">#beba46</color>
<color name="background_color">#771414</color>
</resources>

不同客户下的string.xml就改变hello_world字符串:

<resources>
  <string name="hello_world">Stark Industries</string>
</resources>
<resources>
<string name="hello_world">Wayne Enterprises</string>
</resources>

acitivity_main.xml里面的TextView被修改使用心得colors和strings。

<TextView
android:id="@+id/name_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/text_color"
android:background="@color/background_color"
android:textSize="32sp"
android:text="@string/hello_world" />

效果如下图:

有一个需要注意的地方。flavorDimension标签中将attitude放在client前面,以为这attitude里面的值比client里面的优先级高。因此将hello_world字符串从每个attitude flavor中去除。交换client和attitude的顺序也是这样工作。

最新文章

  1. scikit-learn一般实例之八:多标签分类
  2. 从源代码构建 Go 开发环境
  3. o-sync-and-o-direct
  4. IOS客户端Coding项目记录(五)
  5. html5 和css3的小知识!
  6. 【ZZ】C 语言中的指针和内存泄漏 &amp; 编写高效的C程序与C代码优化
  7. 如何在Eclipse中开发并调试自己的插件(或者说如何将自己的代码插件化)
  8. Android的Notification的简介-android学习之旅(四十一)
  9. Android 自定义 ViewPager 打造千变万化的图片切换效果
  10. python爬取中国天气网站数据并对其进行数据可视化
  11. DNSLOG的Payload
  12. 浅谈Overload和Override
  13. C &lt;string.h&gt;常用函数介绍
  14. gcc/g++ disable warnings in particular include files
  15. DevOps之技能面
  16. Flare-On4 解题复现
  17. Framework连接oracle数据库以及Cognos服务器出现错误
  18. MySQL通过视图(或临时表)实现动态SQL(游标)
  19. 沈阳网络赛F-Fantastic Graph【贪心】or【网络流】
  20. NIO概述及实例(时钟服务器)

热门文章

  1. jquery如何判断checkbox(复选框)是否被选中 全选 反选
  2. javascript - 你不容错过的es6模板写法
  3. ACE_Task::putq(转)
  4. Intellij IDEA + Tomcat 出现 HTTP status 404错误的解决办法
  5. Spring集成Jersey开发(附demo)
  6. ohasd failed to start: Inappropriate ioctl for device
  7. c#枚举的描述和值
  8. Atitit.收银系统pos 以及打印功能的行业标准
  9. FPGA研发之道(25)-管脚
  10. linux ls命令按时间显示文件