在android开发中,包的构建通过gradle脚本来完成的,这个脚本也提供了很多东西来配合我们开发。最常见的类似渠道和不同版本包。
打包的配置常见的是buildTypes节点,通过buildTypes设置不同的action完成不同包的输出
gradle虽然是插件,但是最终还是通过执行脚本翻译成DSL,通过DSL构造出。gradle的基础抽象类是BaseExtension,这个不属于Android aosp中的代码,是通过gradle包导入执行的。这些都是属于gradle的Api,如需了解可以电极节点快捷导入代码或者查看gradle包下节点。
buildTypes数据android{}节点下,android{}指向project.java类,buildTypes属于BaseExtension.java类中。
在gradle中,设置的这些阶段,最终在执行gradle build的时候,都会被转换成代码。每个节点都会对应一个方法,模块名就是方法名。
public void buildConfigField(@NonNull String type,@NonNull String name,@NonNull String value)
设置配置变量值,类型,变量名,值
内部是通过Map
buildConfigField("Boolean", 'isDebug', "true") buildConfigField("String", 'name', "zhangshan") buildConfigField("int", 'name', "10")
如果在不同的{}内定义相同的,打不同的包将会覆盖,形成渠道信息差异化
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{}扩展进行配合使用。
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