赞
踩
由于项目涉及多个车型,使用的是同一个base代码,不同车型都有差分项,所以需要进行多渠道打包,编译不同的资源进行编译处理
Android默认提供了Gradle
插件库
classpath "com.android.tools.build:gradle:4.0.1"
在module中的build.gradle
中引入相关插件,如:
apply plugin: 'com.android.application'
而productFlavor正是这个插件中提供的API方便进行配置
需要在module
下的build.gradle
中设置
flavorDimensions "default"
productFlavors {
favor {
}
disfavor {
}
}
此时就可以在AndroidStudio
中的BuildVariants
中选择想要编译的版本
我们只配置了两项,至于这里的为什么有四个选项,这是由于APP默认就会有两个变种,分别是debug和release;
在Android
开发中,Debug版本和Release版本是两种不同的构建方式,它们在以下几个方面有所区别:
这里的flavorDimensions是必须要有的,否则会报错Error:All flavors must now belong to a named flavor dimension.
AndroidStudio3.0之前可以,之后的版本就会提示这个异常;大致是因为Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。解决办法就是添加flavorDimensions “”
最好属性设置default默认,这样就可以保证所有的flavor属于同一个维度;注意这里的flavorDimensions
可以添加多个属性,但是添加多个属性后需要在每个flavor中配置相应的dimension;例如
flavorDimensions "default","channel"
productFlavors {
favor {
dimension "default"
buildConfigField "boolean", "LOG_DEBUG", "false"
}
disfavor {
dimension "channel"
buildConfigField "boolean", "LOG_DEBUG", "true"
}
}
sourceSet
的具体表现类为 com.android.build.gradle.api.AndroidSourceSet
是一个接口;sourceSets
可以针对不同的类型进行个性化设置,main为主干,其他的设置为分支,分支的设置会合并到主干中,并且支持配置多个sourceSet
;
需要在module
下的build.gradle
中设置
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/favor']
res.srcDirs = ['src/main/res', 'src/main/res-favor']
}
favor.java.srcDirs = ['src/main/favor']
favor.assets.srcDirs = ['src/main/favor/assets']
favor.res.srcDirs = ['src/main/res-favor']
disfavor.java.srcDirs = ['src/main/disfavor']
disfavor.assets.srcDirs = ['src/main/disfavor/assets']
disfavor.res.srcDirs = ['src/main/res-disfavor']
}
此时编译的时候就会根据我们选中的不同的渠道下的资源进行编译;上面main中的配置是指将原本编译的路径替换为我们指定的路径,下面的设置是指定不同渠道下需要编译的资源路径
可以根据不同渠道添加不同的依赖文件
dependencies {
flavorImplementation 'xxx'
flavorApi 'xxx'
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。