Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.4——Flavor Dimensions
2024-08-27 15:43:21
问题:
一个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的顺序也是这样工作。
最新文章
- scikit-learn一般实例之八:多标签分类
- 从源代码构建 Go 开发环境
- o-sync-and-o-direct
- IOS客户端Coding项目记录(五)
- html5 和css3的小知识!
- 【ZZ】C 语言中的指针和内存泄漏 &; 编写高效的C程序与C代码优化
- 如何在Eclipse中开发并调试自己的插件(或者说如何将自己的代码插件化)
- Android的Notification的简介-android学习之旅(四十一)
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- python爬取中国天气网站数据并对其进行数据可视化
- DNSLOG的Payload
- 浅谈Overload和Override
- C <;string.h>;常用函数介绍
- gcc/g++ disable warnings in particular include files
- DevOps之技能面
- Flare-On4 解题复现
- Framework连接oracle数据库以及Cognos服务器出现错误
- MySQL通过视图(或临时表)实现动态SQL(游标)
- 沈阳网络赛F-Fantastic Graph【贪心】or【网络流】
- NIO概述及实例(时钟服务器)
热门文章
- jquery如何判断checkbox(复选框)是否被选中 全选 反选
- javascript - 你不容错过的es6模板写法
- ACE_Task::putq(转)
- Intellij IDEA + Tomcat 出现 HTTP status 404错误的解决办法
- Spring集成Jersey开发(附demo)
- ohasd failed to start: Inappropriate ioctl for device
- c#枚举的描述和值
- Atitit.收银系统pos 以及打印功能的行业标准
- FPGA研发之道(25)-管脚
- linux ls命令按时间显示文件