业务需求

为了方便测试, 期望同一手机上能同时安装两个App.
所以需要:

  1. 开发/Release版本包名不一样
  2. 开发/Release icon不一样

开发版本

图标:
包名: com.alipictures.moviepro.dev

线上版本

图标:
包名: com.alipictures.moviepro


利用flavor修改applicationId和AndroidManifest的icon,可以很方便的实现这个需求.
中间有一点小坑, 总结一下.

几个flavor和buildType的结论

1. buildTypes不能设置 applicationId

2. productFlavors不能设置 minifyEnabled

如果需要同时设置混淆和applicationId,需要flavor和buildType组合

3. buildConfigField的覆盖关系是

按优先级从高到低: buildType->Flavor->defaultConfig

例如同时存在同一变量定义.

productFlavors {dev {buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_flavor\""}
}defaultConfig {buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_default_config\""
}buildTypes { debug { buildConfigField "String", "ADD_BY_FLAVOR_DEV", "\"set_in_build_type\"" }
}

最终 buildTypes的会生效.

4. 添加buildConfigField的时候, 如果是String加上\"

举例:

buildConfigField "String", "ADD_BY_FLAVOR_DEV",
"ADD_BY_FLAVOR_DEV" 

生成的BuildConfig.java会变成

public static final String ADD_BY_FLAVOR_DEV = ADD_BY_FLAVOR_DEV;

这并不是一个字符串.

所以需要改为

buildConfigField "String", "ADD_BY_FLAVOR_DEV",
"\"ADD_BY_FLAVOR_DEV\""

生成的BuildConfig.java会变成

public static final String ADD_BY_FLAVOR_DEV = "ADD_BY_FLAVOR_DEV";

5.增加BuildType带来的影响

如果增加一个buildType. 叫做 devBuild

buildTypes {devBuild{}
}

那么:

1.会增加一系列gradle task辅助编译. 比如assembleDevBuild.
2.如果有些依赖只在该buildType中起作用,可以设置为devBuildCompile中依赖

dependencies {devBuildCompile  project(':test')
}

3.带来的坑:

因为是新增了devBuild这个build type, 所以

  1. 以前的debugCompile的依赖会全被失效(devBuildCompile会生效)
  1. 如果项目是多个Module组成. 比如 "App" module 依赖于 "Widget" Module.
    "App"中加入的devBuild, 在"widget"并不能使用, 就是说"widget"不能使用devBuildCompile 处理依赖

6.增加Flavor带来的影响

flavor会和buildType做一个组合,生成编译task
如果增加了flavor名为 dev, 会新增assembleDevRelease 和assembleDevDebug 命令

淘票票专业版本修改结果

1.设置两个flavor,控制package name和icon

//build.gradle
android {productFlavors {dev {applicationId "com.alipictures.moviepro.dev"manifestPlaceholders = [label: "开发版", icon: "@drawable/icon_debug"]}official {applicationId "com.alipictures.moviepro"manifestPlaceholders = [label: "@string/app_name", icon: "@drawable/ic_launcher"]}}
}

2.排除 devRelease; officialDebug这两种编译

//build.gradle
android.variantFilter { variant ->if (variant.buildType.name.equals('release')) {variant.getFlavors().each() { flavor ->if (flavor.name.equals('dev')) {variant.setIgnore(true);}}}if (variant.buildType.name.equals('debug')) {variant.getFlavors().each() { flavor ->if (flavor.name.equals('official')) {variant.setIgnore(true);}}}
}

3.摩天轮编译命令

测试包:

assembleDevDebug

发布包:

assembleOfficialRelease

gradle配置 flavor和buildType小结相关推荐

  1. Android Studio下项目构建的Gradle配置及打包应用变体

    Gradle简介   Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点. ...

  2. android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置

    Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...

  3. build.gradle配置参数详解

    转载地址:http://blog.csdn.net/baidu_31093133/article/details/51860637 build.gradle配置参数详解//声明是Android程序ap ...

  4. build.gradle配置

    文章目录 1 build.gradle配置 1.1 project下的build.gradle 1.2 module下的build.gradle 2 Apk版本号的命名规则及配置方法 2.1 命名规则 ...

  5. Android build.gradle配置详解

    AndroidStudio中的Gradle文件 Android Studio是采用gradle来构建项目的,gradle是基于groovy语言. 如上图所示,创建一个AndroidStudio项目,会 ...

  6. 【Gradle-2】一文搞懂Gradle配置

    1.前言 "Gradle的配置太多了,经常版本更新还有变化,而且它还能扩展,记是记不住了,只能用到再搜了,哎,难顶" 真的难顶,但是我想挑战一下- 本文介绍的重点: Gradle配 ...

  7. gradle 配置详细说明

    gradle Gradle 依赖:Apache Ant ,Apache Maven ,项目自动化建构工具 ,Groovy, 特定领域语言(DSL), Gradle =>一个基于Apache An ...

  8. 史上最全Android build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  9. Android之通过配置Flavor实现一个项目打包成多个apk(转载)

    转载自https://www.cnblogs.com/zhujiabin/p/7650924.html 最近我老大问我一个问题,说Android可不可以像iOS那样,通过target对项目进行管理啊. ...

最新文章

  1. 机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的
  2. 使用jsonpath解析json内容
  3. Android-Binder进程间通讯机制-多图详解
  4. 【StatLearn】统计学习中knn算法实验(2)
  5. Ubuntu网络配置方法
  6. Web IOC 容器初体验
  7. matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
  8. [JavaWeb-JavaScript]JavaScript_Math数学对象
  9. 从MongoDB GridFS流式传输文件
  10. python的代码在哪写_python代码在哪里编写
  11. 项目管理九要与八不要
  12. php 前后端 不对称加密,AES前后端对称加密
  13. Hyperion神器之SmartView产品(中篇)
  14. c++ 栈 STL的基本操作
  15. 即席查询之Presto
  16. windows--XP的140个技巧!
  17. cad缩放_CAD中的AL是什么指令? 怎么操作哦
  18. codeforces 697C Lorenzo Von Matterhorn(二叉树LCA)
  19. 拓扑学+计算机,拓扑学是什么
  20. 算法学习(九)之“宽度优先搜索”

热门文章

  1. wait waitpid
  2. 巡查结果可视化质量控制
  3. 巽为风:谦让恭顺;兑为泽:和悦相处
  4. 准备日语二级最好用什么教材啊?标日中级上下两本可以吗?为什么很多人
  5. 读民办大学的计算机科学与技术好就业吗,找工作起薪高的十大本科专业,计算机科学与技术仅排第六!...
  6. Java开发实战项目分享之学成在线v1.0项目总结
  7. [小O地图-数据] - 多条件查询及展示地图POI数据
  8. c语言面试笔试题及答案,C语言面试题(含答案)
  9. Java开发知识之Java的数字处理类Math类
  10. 哈哈哈!当前的人工智能有多智障?