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<String, ClassField> 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中

<meta name="zhangshan" value="${key}">

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

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

四、关于gradle中ext扩展

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

ext{

//扩展体

}

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


ext{

    //定义了一个map队列
    map=[name:"zhangshan",sex:false,age:12]
    //定义一个变量name
    def name="张珊"
    def age=12
    def sex=false
    def list=[11,34,45,66,77,8]


}

buildConfigField

猜你喜欢

转载自blog.csdn.net/qq36246172/article/details/133920377
今日推荐