乐趣区

关于android:Android多版本flavor配置之资源文件和清单文件合并介绍

常识背景

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” 中的各变量,以实现对应型号产品特定的性能和逻辑。

退出移动版