说到ProductFlavor
不得不提到SourceSet
,SourceSet
是源集的意思,通过SourceSet
,我们可以指定不同版本的资源路径。注意SourceSet
不是AGP独有的概念,Java Plugin
也有SourceSet
的定义。
========================================================================
BuildType
可以配置我们需要的构建类型,最常见的是debug和release,用于区分开发模式和发布模式,这两种类型是AGP默认创建的。当然我们还可以定义其他的build类型。在buildTypes
闭包中我们可以配置很多属性,具体包含哪些呢?我们先来看看buildType对应的类com.android.build.gradle.internal.dsl.BuildType
的继承结构
我们再看看defaultConfig
对应的类com.android.build.gradle.internal.dsl.DefaultConfig
的继承结构
可以看到defaultConfig
和buildType
最终到继承自BaseConfigImpl
,所以为什么我们平时总感觉某个参数在哪都可以出现的,原因就在于映射的类都相关的继承关系。BaseConfigImpl
中定义的属性包括如下
public abstract class BaseConfigImpl implements Serializable, BaseConfig {
private String mApplicationIdSuffix = null;
private String mVersionNameSuffix = null;
private final Map<String, ClassField> mBuildConfigFields = Maps.newTreeMap();
private final Map<String, ClassField> mResValues = Maps.newTreeMap();
private final List mProguardFiles = Lists.newArrayList();
private final List mConsumerProguardFiles = Lists.newArrayList();
private final List mTestProguardFiles = Lists.newArrayList();
private final Map<String, Object> mManifestPlaceholders = Maps.newHashMap();
@Nullable
private Boolean mMultiDexEnabled;
@Nullable
private File mMultiDexKeepProguard;
@Nullable
private File mMultiDexKeepFile;
…
}
buildTypes
中配置的属性会覆盖defaultConfig
中的定义
android {
defaultConfig {
manifestPlaceholders = [hostName:“www.example.com”]
…
}
buildTypes {