【安卓进阶】Product Flavor基础玩法
在安卓项目开发中,大多时候总是有测试环境、生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境、生产环境的切换。
这样就造成了项目管理上的不便,频繁的手工在测试、生产代码中注释相关代码来切换环境,效率低下不说,而且从工程角度来说是不专业的。
Product Flavor
Product Flavor的出现解决了我们切换环境的问题,而且还拥有更加强大的功能,下面先了解一下最基本的使用方法,例如想建立一份测试环境、生产环境的构建变体。
在模块的build.gradle下的 android { } 内增加:
flavorDimensions "dev"
productFlavors {
ceshi {
dimension "dev"
buildConfigField("String", "URL", "\"https://abc.com\"")
}
prod{
dimension "dev"
buildConfigField("String", "URL", "\"https://dfg.com\"")
}
}
然后Sync Project with Gradle Files,在Android Studio的Build Variants下即可看到增加了4个构建变体

下面来讲解一下上面的相关知识点:
(1)buildConfigField在构建的时候在环境中加入静态变量,在代码中通过BuildConfig类的属性进行访问,上面我们在两个环境中都添加了变量名为URL的变量,而且两个环境中的变量的值均不相同,在项目的代码中我们可以使用BuildConfig.URL进行访问。
(2)为什么会出现4个构建变体:
> 构建变体 = [风格维度的风格数1] * [风格维度的风格数2] * ...... * [Release | Debug],上面我们定义了一个风格纬度:dev,其中的风格数是:ceshi、prod,所以 [ceshi | prod] * [Release | Debug] 等于4个构建变体。
(3)可以定义多个风格纬度吗?
> 可以,例如定义两个风格维度:flavorDimensions "dev", "lan",那么构建变体的数目:[dev维度的风格数] * [lan维度的风格数] * [Release | Debug]
通过上面的基础用法,已经能处理好测试环境、生产环境切换麻烦的问题,而且每个环境都能定义不同的变量值,这样就能使工程的代码更加简洁。
【安卓进阶】Product Flavor基础玩法的更多相关文章
- windows下mongodb基础玩法系列二CURD附加一
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- windows下mongodb基础玩法系列一介绍与安装
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- Python的生成器进阶玩法
Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...
- 【Python基础】random 的高级玩法
random 模块的高级玩法 1.python 随机产生姓名 方式一: import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', '王', ' ...
- 《Invert》开发日志01:核心玩法设计
前面提过,这个游戏的核心玩法基于我做的第一个Unity游戏,名字就叫<Invert>,现在在应用宝上面还能搜到.不过那个游戏也不是我原创的,它的玩法设计来自github上的一个开源项目(h ...
- 实战Excel Add-in的三种玩法
作者:陈希章 发表于 2017年11月26日 前言 这个系列文章应该有一阵子没有更新了,原因是一如既往的多,但是根本所在是我对于某些章节其实还没有完全想好怎么写,尤其是对于Office Add-in这 ...
- 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等
本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...
- 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)
十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器 ...
随机推荐
- JUC之原子类
在分析原子类之前,先来了解CAS操作 CAS CAS,compare and swap的缩写,中文翻译成比较并交换. CAS 操作包含三个操作数 —— 内存位置(V).预期原值(A)和新值(B).如果 ...
- java当中JDBC当中请给出一个sql server的helloworld例子
[学习笔记] 1.sql server的helloworld例子: import java.sql.*; public class JdbcHelloSqlServer { public stati ...
- Python19之函数和过程
一.函数和过程 函数和过程都是指一段实现特定功能的代码段,如果该代码段有返回值则称为函数,否则称为过程. 注:Python中只有函数而没有过程,就算是函数体内没有return语句返回一个值,Pytho ...
- 剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用 ...
- PB笔记之取项次最大值(即使用.describe(" evaluate('ITM_max',0) ") 获取列的最大值) 的条件
dw_1.describe(" evaluate('ITM_max',0) ") :使用 describe 配合 evaluate 取列的最大最小值(或其它表达式)时,必须在数据 ...
- 软键盘 显示隐藏 测量高度 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Vue自定义指令和自定义过滤器
一.自定义指令: 自定义指令分为两种:全局自定义指令和局部自定义指令 全局指令指所有组件都可以使用,局部指令是只有在当前组件中才可以使用. 如,我们现在有个需求,当一个输入框获取焦点时,显示出一个di ...
- Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务
什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...
- 关于Mybatis中mapper.xml的传入参数简单技巧
由于在做项目的时候,我看见同事使用的传入参数类型各式各样,感觉没规律可言,闲暇的时候我就自己搭建了项目做了一些传入参数的测试(当然其实更好的方式是看源码,但是博主能力有限,毕竟入行没多久,看起来很吃力 ...
- linux环境,hidraw设备自动加载时默认权限的设置方法
在linux系统中,hidraw设备会自动加载并设置默认权限,但系统的默认只允许root用户访问,普通用户是不允许读写. 设置的方法是修改udev的配置,配置路径是/etc/udev/rules.d/ ...