常识背景

Android studio降级到3.0之后,gradle减少了多维度治理配置,便于同一个我的项目中创立利用的不同版本,别离治理依赖项并签订配置。创立产品风味与创立构建类型相似:只需将它们增加到productFlavors {}代码块,并配置您想要的设置。产品风味反对与 defaultConfig雷同的属性,这是因为defaultConfig实际上属于ProductFlavor类。

工程中配置Flavor

如下这个是module外面的build.gradle局部代码(android节点下),这外面次要减少的是productFlavors,这个就是用来配置不同我的项目的参数。

在这里我配置了三个我的项目,别离是intermodalTransport、onlineBattle、convergence。不同的我的项目ID当然须要不同,配置ID的办法有两种: 

  1. 第一种就是间接应用applicationId这个属性,间接给intermodalTransport配置一个ID属性即可。
  2. 第二种就是应用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"中的各变量,以实现对应型号产品特定的性能和逻辑。