gradle配置 flavor和buildType小结
业务需求
为了方便测试, 期望同一手机上能同时安装两个App.
所以需要:
- 开发/Release版本包名不一样
- 开发/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, 所以
- 以前的debugCompile的依赖会全被失效(devBuildCompile会生效)
- 如果项目是多个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小结相关推荐
- Android Studio下项目构建的Gradle配置及打包应用变体
Gradle简介 Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点. ...
- android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置
Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...
- build.gradle配置参数详解
转载地址:http://blog.csdn.net/baidu_31093133/article/details/51860637 build.gradle配置参数详解//声明是Android程序ap ...
- build.gradle配置
文章目录 1 build.gradle配置 1.1 project下的build.gradle 1.2 module下的build.gradle 2 Apk版本号的命名规则及配置方法 2.1 命名规则 ...
- Android build.gradle配置详解
AndroidStudio中的Gradle文件 Android Studio是采用gradle来构建项目的,gradle是基于groovy语言. 如上图所示,创建一个AndroidStudio项目,会 ...
- 【Gradle-2】一文搞懂Gradle配置
1.前言 "Gradle的配置太多了,经常版本更新还有变化,而且它还能扩展,记是记不住了,只能用到再搜了,哎,难顶" 真的难顶,但是我想挑战一下- 本文介绍的重点: Gradle配 ...
- gradle 配置详细说明
gradle Gradle 依赖:Apache Ant ,Apache Maven ,项目自动化建构工具 ,Groovy, 特定领域语言(DSL), Gradle =>一个基于Apache An ...
- 史上最全Android build.gradle配置详解
Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...
- Android之通过配置Flavor实现一个项目打包成多个apk(转载)
转载自https://www.cnblogs.com/zhujiabin/p/7650924.html 最近我老大问我一个问题,说Android可不可以像iOS那样,通过target对项目进行管理啊. ...
最新文章
- 机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的
- 使用jsonpath解析json内容
- Android-Binder进程间通讯机制-多图详解
- 【StatLearn】统计学习中knn算法实验(2)
- Ubuntu网络配置方法
- Web IOC 容器初体验
- matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
- [JavaWeb-JavaScript]JavaScript_Math数学对象
- 从MongoDB GridFS流式传输文件
- python的代码在哪写_python代码在哪里编写
- 项目管理九要与八不要
- php 前后端 不对称加密,AES前后端对称加密
- Hyperion神器之SmartView产品(中篇)
- c++ 栈 STL的基本操作
- 即席查询之Presto
- windows--XP的140个技巧!
- cad缩放_CAD中的AL是什么指令? 怎么操作哦
- codeforces 697C Lorenzo Von Matterhorn(二叉树LCA)
- 拓扑学+计算机,拓扑学是什么
- 算法学习(九)之“宽度优先搜索”
热门文章
- wait waitpid
- 巡查结果可视化质量控制
- 巽为风:谦让恭顺;兑为泽:和悦相处
- 准备日语二级最好用什么教材啊?标日中级上下两本可以吗?为什么很多人
- 读民办大学的计算机科学与技术好就业吗,找工作起薪高的十大本科专业,计算机科学与技术仅排第六!...
- Java开发实战项目分享之学成在线v1.0项目总结
- [小O地图-数据] - 多条件查询及展示地图POI数据
- c语言面试笔试题及答案,C语言面试题(含答案)
- Java开发知识之Java的数字处理类Math类
- 哈哈哈!当前的人工智能有多智障?