• Android gradle动态配置不同打包环境参数值


    一、背景

            在android开发中,包的构建通过gradle脚本来完成的,这个脚本也提供了很多东西来配合我们开发。最常见的类似渠道和不同版本包。

    打包的配置常见的是buildTypes节点,通过buildTypes设置不同的action完成不同包的输出

    二、gradle的Java类

            gradle虽然是插件,但是最终还是通过执行脚本翻译成DSL,通过DSL构造出。gradle的基础抽象类是BaseExtension,这个不属于Android aosp中的代码,是通过gradle包导入执行的。这些都是属于gradle的Api,如需了解可以电极节点快捷导入代码或者查看gradle包下节点。

    三、buildTypes

    buildTypes数据android{}节点下,android{}指向project.java类,buildTypes属于BaseExtension.java类中。

    在gradle中,设置的这些阶段,最终在执行gradle build的时候,都会被转换成代码。每个节点都会对应一个方法,模块名就是方法名。

    BuildType之方法介绍

    1.buildConfigField
    public void buildConfigField(@NonNull String type,@NonNull String name,@NonNull String value)

    设置配置变量值,类型,变量名,值

    内部是通过Map mBuildConfigFields存储的。

    buildConfigField("Boolean", 'isDebug', "true") buildConfigField("String", 'name', "zhangshan") buildConfigField("int", 'name', "10")

    如果在不同的{}内定义相同的,打不同的包将会覆盖,形成渠道信息差异化

    2.manifestPlaceholders
    manifestPlaceholders是map类型,直接服务在manifest文件中

    插件中的map:=[key:value,key:value,key:value]

    manifestPlaceholders=["name":"zhangshan","sex":true,"age":100]
    使用方法:

    AndroidManifest.xml中

    这里设置一个元素名为zhangshan,值引用了manifestPlaceholders中的key,这里引用站位与kotlin写法一样。

    这种配置在build文件中一般和ext{}扩展进行配合使用。

    四、关于gradle中ext扩展

    ext是gradle中project.java类中的,可以自由扩展。格式

    ext{

    //扩展体

    }

    ext内部常用的就是申明数组和定义变量

    1. ext{
    2. //定义了一个map队列
    3. map=[name:"zhangshan",sex:false,age:12]
    4. //定义一个变量name
    5. def name="张珊"
    6. def age=12
    7. def sex=false
    8. def list=[11,34,45,66,77,8]
    9. }

    buildConfigField
  • 相关阅读:
    Mybatis-Plus——分页+模糊查询
    【vscode】远程容器内开发python
    229. 多数元素 II Python
    基于Springboot+vue的电影票预定管理系统 elementui
    2022南京邮电大学-计软网安学院-电子信息-应届生-考研分享
    出现Browse information of one xxxx解决方法
    ES 架构及基础 - 1
    【21天学习挑战赛】顺序查找
    python+pytest接口自动化(2)-HTTP协议基础
    基于nodejs+vue语言的酒店管理系统
  • 原文地址:https://blog.csdn.net/qq36246172/article/details/133920377