第一步:在androidManifest
<meta-data
android:name="channel"
android:value="${channel_value}"/>
第二步:配置gradle中的基本信息
//产品维度,没有实际意义,但是gradle需要
flavorDimensions 'default'
//定义各个渠道
productFlavors{
baidu {}
xiaomi {}
yyb {}
}
productFlavors.all{
flavor-> manifestPlaceholders = [channel_value: name]
}
applicationVariants.all{ variant ->
variant.outputs.all {output ->
outputFileName="1.apk"
}
}
gradle的基本介绍
groovy语法:继承自java语法,不需要专门学习它
gradle api:类似于androidsdk一样的存在,在开发gradle插件时提供底层支持
buildscript:声明gradle脚本构建项目时所需要使用依赖项,仓库地址,第三方插件等,构建项目会优先执行buildscript代码块中的内容
项目的构建生命周期:初始化阶段->配置阶段->执行阶段
1.初始化阶段:会执行项目根目录下面settings.gradle文件,分析那些project参与本次构建
2.配置阶段:加载本次参与本次构建项目下的build.gradle文件,会将build.gradle文件解析并且实例化成为一个Gradle的Project对象,然后分析Project之间的依赖,分析Project下Task之间的关系
3.执行阶段:这是Task真正被执行的阶段,Gradle会根据依赖关系决定那些task需要被执行,以及执行的先后顺序
Transform的定义与配置
作用:如果我们要想对编译时产生的class文件,在转换成Dex之前做一些处理(字节码插桩,替换父类等),我们可以通过Gradle插件来注册Transform,注册后的Transform也会被Gradle包装成Gradle Task,这个Task一般在java compile Task执行完毕后执行
使用场景:
1.当对编译生成的class文件做自定义处理
2.当需要读取编译产生的class文件,做一些事情,但是不需要修改它