• 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
  • 相关阅读:
    zabbix监控部署keepalived高可用
    【ldt_struct】0ctf2021-kernote
    分类预测 | MATLAB实现1-DCNN一维卷积神经网络分类预测
    day-48 代码随想录算法训练营(19) 动态规划 part 09
    Spark数据倾斜_产生原因及定位处理办法_生产环境
    LongLoRA:超长上下文,大语言模型高效微调方法
    Yakit工具篇:中间人攻击(平替Burp)的相关技巧-03
    【踩坑系列】发送微信模板消息返回40165 invalid weapp pagepath
    小学生python游戏编程arcade----爆炸粒子类
    基础组件-流量回放平台设计
  • 原文地址:https://blog.csdn.net/qq36246172/article/details/133920377