问题:

一个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的顺序也是这样工作。

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.4——Flavor Dimensions的更多相关文章

  1. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  2. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  3. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  4. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  6. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  7. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试

    问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记1.2

    在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...

随机推荐

  1. 在hadoop作业中自定义分区和归约

    当遇到有特殊的业务需求时,需要对hadoop的作业进行分区处理 那么我们可以通过自定义的分区类来实现 还是通过单词计数的例子,JMapper和JReducer的代码不变,只是在JSubmit中改变了设 ...

  2. C# 中 in,out,ref 的作用与区别

    In:过程不会改写In的内容 Out和out:传入的值不会被过程所读取,但过程可以写 ref:传入的值,过程会读,也会写 就象你把布料送到裁缝的一个收料箱(裁缝用这个区别是哪家客户) IN:这块布料, ...

  3. ssh之<context:component-scan base-package="com.xx" />

    <context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能, 同时还启用了注释驱动自动注入的功能 ( 即还隐式地在内部注册了 A ...

  4. 使用Google-Authenticator加强serverSSH登录

    对于须要特殊加密的人群,我这里给出对应的方法来进行谷歌式加密. 过程例如以下: 准备: 首先在你的手机上准备好client(自己百度下载) 接下来依照命令做: date 查看系统时间       da ...

  5. Tomcat中work目录的作用

    今天在修改了某个jsp后发现:tomcat容器启动后,访问该jsp返回的结果依然是修改之前的内容,略感不解,于是乎研究了一下Tomcat中work目录的作用. Tomcat中work目录的作用: js ...

  6. 获取取并下载tuku的漫画的爬虫

    代码地址如下:http://www.demodashi.com/demo/12842.html 概述 一个简单的爬虫,实现是爬取tuku网站的漫画.并下载到脚本的文件夹中,下载的漫画按照章节名放在各自 ...

  7. jumpserverv0.5.0 基于 CentOS7安装部署

    基于 CentOS 7 一步一步安装 Jumpserver 0.5.0 环境 系统: CentOS 7 IP: 192.168.244.144 关闭 selinux和防火墙 # CentOS 7 $ ...

  8. python下载腾讯云慢日志并发送邮件附件

    这里没优化,只是对腾讯云下载慢日志,然后通过邮件发送出去 #!/usr/bin/env python # encoding: utf-8 import json import smtplib impo ...

  9. find命令下排除部分目录修改权限

    #!/bin/bash # 项目文件夹.文件权限修改 # 批量修改文件夹或者文件的权限时,需要先忽略掉可写文件夹('./bootstrap/cache'.'./public/attachments'. ...

  10. Centos RSA 登录

    创建密钥 ssh-keygen -t rsa 1.用户目录下新建.ssh/authorized_keys mkdir .ssh  #创建隐藏目录 #修改文件访问权限 chmod 700 .ssh cd ...