Android多版本flavor配置之资源文件和清单文件合并介绍
知识背景
Android studio升级到3.0之后,gradle增加了多维度管理配置,便于同一个项目中创建应用的不同版本,分别管理依赖项并签署配置。创建产品风味与创建构建类型类似:只需将它们添加到productFlavors {}代码块,并配置您想要的设置。产品风味支持与 defaultConfig相同的属性,这是因为defaultConfig实际上属于ProductFlavor类。
工程中配置Flavor
如下这个是module里面的build.gradle部分代码(android节点下),这里面主要增加的是productFlavors,这个就是用来配置不同项目的参数。

在这里我配置了三个项目,分别是intermodalTransport、onlineBattle、convergence。不同的项目ID当然需要不同,配置ID的方法有两种:
第一种就是直接使用applicationId这个属性,直接给intermodalTransport配置一个ID属性即可。
第二种就是使用applicationIdSuffix这个属性,这个的意思是在defaultConfig的默认ID基础上,在后面追加一段,如下图示例代码。
android {
defaultConfig {
applicationId "com.flavor.myapp"
}
productFlavors {
intermodalTransport{
applicationIdSuffix ".a"
}
onlineBattle {
applicationIdSuffix ".b"
}
}
}
Ps: 如上是build.gradle文件配置,配置完成后可在如下截图的Build Variants处看到相应配置的选择菜单,截图如下:

资源文件配置
我在build.gradle配置了三个项目,那么相应的需要建立三个资源文件夹,main属于工程主体,如下图所示。

Ps:在这三个文件夹里面创建资源的时候一定要和main的文件格式一致,这个格式一致是指包名必须相同。在配置Flavor中,在进行构建的时候会将选中的Flavor和main进行结合构建,说白了就是如果Flavor没有的东西就会使用main里面的代替,一般来说都会各自用各自的资源,比较好管理。
Java文件:要求flavor中只存放各自特性的java文件代码,main中放置多个flavor公共的java文件代码。
清单文件Manifest
清单文件不像Java代码文件那样,每个项目相同的Java代码文件不可以和main中的Java代码文件共存,而是main和每个项目都可以有清单文件,但是又不会像res资源文件那样,项目中的res资源文件会覆盖main的res资源文件。
在编译的时候Android studio会把main的清单文件和选中项目的清单文件合并,但是合并就会出现冲突。在这里只介绍两种合并方法:merge和replace
具体配置属性位置如下截图:

Application属性字段:node
Merge属性:一般来说以main中为主题,其他flavor为分支差异版本配置的时候使用,一般都是把flavor与main的清单文件合并取交集。
Replace属性:在出现flavor与main中有相同的属性名的时候,或优先使用flavor中的清单属性替换main,这个属性不建议使用。
如何代码识别当前处于哪个flavor开发环境?
代码中获取配置文件"BuildConfig.java"中的各变量,以实现对应型号产品特定的功能和逻辑。

Android多版本flavor配置之资源文件和清单文件合并介绍的更多相关文章
- android 学习随笔一(配置调试与基础)
一.基础与开发环境安装配置 Memory Options: VM Heap表示每个应用所能占用的最大内存. Android 项目目录结构 SRC java源码 android.jar 导入jar才能使 ...
- jar文件和aar文件的区别
1. *.jar,JAR 文件就是 JavaArchive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.只包含了class文件与清单文件 ,不包含资源文件 ...
- Android Studio下通过Gradle配置实现资源文件的模块化
当开发一个app模块个数很多的时候,资源文件就会特别多,布局也会多起来,这时所有的layout都放在同一个目录下,就会显得臃肿,而且不好找相应的布局. 最近看到相关资料,发现在Android Stud ...
- 我的Android进阶之旅------>Android SDK支持的配置标识符(有用的参考文件)
Android SDK支持的配置标致符 配置标识符 标识符值 描 述 MCC MNC 例子: mcc310: MCC310-MNC004: MCC208-MNC00 MCC(移动国家代码 ...
- Android:JNI与NDK(三)NDK构建的脚本文件配置
友情提示:欢迎关注本人公众号,那里有更好的阅读体验以及第一时间获取最新文章 本文目录 一.前言 本篇我们介绍Android.mk与CMakeLists.txt构建NDK的配置文件,我们知道目前NDK的 ...
- ******可用 SpringBoot 项目打包分开lib,配置和资源文件
spring-boot多模块打包后,无法找到其他模块中的类https://blog.csdn.net/Can96/article/details/96172172 关于SpringBoot项目打包没有 ...
- [原创]java WEB学习笔记69:Struts2 学习之路-- 消息处理与国际化,概述,配置国际资源文件,访问国际化消息,通过超链接切换语言
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- spring-boot配置静态资源映射的坑:properties文件不能添加注释
如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...
- [Android] 配置安卓模拟器,使得dex文件不被优化成odex
最近做一个模块,需要将apk里面加载的dex文件dump出来,所以需要配置让dalvik不要把dex文件优化成odex. 1. 配置build.prop 主要是通过修改文件/system/build. ...
随机推荐
- 分享一个为Linux创建的任务管理器,看起来就像Windows的任务管理器
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 链接:https://www.linuxmi.com/sysmontask-linux-tas ...
- 按照 Promise/A+ 规范逐行注释并实现 Promise
0. 前言 面试官:「你写个 Promise 吧.」 我:「对不起,打扰了,再见!」 现在前端越来越卷,不会手写 Promise 都不好意思面试了(手动狗头.jpg).虽然没多少人会在业务中用自己实现 ...
- Nginx代理websocket为什么要这样做?
Nginx反向代理websocket 示例: http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } s ...
- Flask01 第一个flask项目
参考地址:https://github.com/miguelgrinberg/microblog/tree/v0.1 flask环境[苹果M1] 添加虚拟环境 python3 -m venv venv ...
- PTA 7-4 堆栈操作合法性 (20 分)
假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列.请编写程序,输入S ...
- vue中blob文件下载及其它下载方式
一.Blob对象的了解 1:blob表示一个不可变.原始数据的类文件对象.Blob()构造函数返回一个新的blob对象:blob对象的内容由参数给出的值串联组成: 2:new Blob(array, ...
- 2021夏季学期华清大学EE数算OJ1:算数问题
第一次写博客,有点紧张... 也许格式也没有特别丑吧 先看原题( 此题做法众多,这里仅仅介绍蒟蒻的一种很复杂的思路(但最后还是喜提0ms的好成绩) 读完这道题,不难发现,此题不过是一个质因数分解+一堆 ...
- 一图详解java-class类文件原理
摘要:徒手制作一张超大的类文件解析图,方便通过浏览这个图能马上回忆起class文件的结构以及内部的指令. 本文分享自华为云社区<[读书会第十二期]这可能是全网"最大".&qu ...
- 【Java8新特性】Lambda表达式
一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...
- 152. Maximum Product Subarray - LeetCode
Question 152. Maximum Product Subarray Solution 题目大意:求数列中连续子序列的最大连乘积 思路:动态规划实现,现在动态规划理解的还不透,照着公式往上套的 ...