• 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"
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

  • 相关阅读:
    【GEE学习日记】GEE下载ERA5指定小时数据
    day40-网络编程02
    4721. 排队
    深度学习基础知识 Batch Normalization的用法解析
    搭建自己的SSR
    Sql 异常 + Error
    数字通信和fpga概述——杜勇版本学习笔记
    从Cookie到设备ID,从算法到云+端!全面盘点设备指纹技术的五代发展
    【成为红帽工程师】第三天 web服务器
    驱动开发:内核封装TDI网络通信接口
  • 原文地址:https://blog.csdn.net/m0_62051288/article/details/126189598