前言
一般情况下,我们的开发环境分为debug
与release
两个环境,这个一般在新建Android项目时,Gradle文件中已完成了默认的配置,代码如下(debug
默认存在):
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
那么,如果我们在有的项目中需要配置其它环境(如alpha、beta等),这个时候就需要额外的配置了。
buildTypes(配置构建类型)
buildTypes
位于app-build.gradle
文件的android{}
代码块中,它是用来创建和配置app的构建类型的,新建一个项目在模块的build.gradle
文件中会默认生成debug
与release
两个环境版本。
多类型配置与其作用
当我们app需要在不同的环境下生成对应的版本时,这个时候就需要在buildTypes
内进行对应版本类型的配置工作(如:网络baseUrl的配置),示例代码如下:
buildTypes {
release {
minifyEnabled false
buildConfigField 'String', 'BASE_URL', '"http://xxxx-release.**/"'
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
alpha {
minifyEnabled false
buildConfigField 'String', 'BASE_URL', '"http://xxxx-alpha.**/"'
}
beta {
minifyEnabled false
buildConfigField 'String', 'BASE_URL', '"http://xxxx-beta.**/"'
}
}
通过如上配置,我们可以实现针对不同的环境创建对应的版本类型。
通过Gradle->app->build->assemble可以一键进行所有类型版本的构建,生成对应的apk文件。
applicationIdSuffix
该字段表示,在不改变当前程序默认ID(包名)的情况下,为其添加后缀。如:当前包名是com.zihao.app
,如果你想区分测试包与线上包的情况,这个时候在buildTypes->debug
中将applicationIdSuffix
设置为applicationIdSuffix ".debug"
,那么对应的包名就变成了com.zihao.app.debug
,示例代码如下:
buildTypes {
...
debug {
applicationIdSuffix ".debug"
}
}
源集(Source Sets)构建
Android Studio会为每个模块将源代码和资源文件组成一个逻辑上的源集。每个模块的main/
源集包括所有构建变种都是用的源码和资源。其它源集的目录是可选的,Android Studio不会自动为你创建他们,当你构建新的变种的时候。但是,构建具体的app版本的时候,创建于main/
类似的源集,可以帮助组织Gradle应该使用的文件和资源(有助于让Gradle只应在构建特定应用版本时使用的文件和资源井然有序)。
通常源代码是放在'src/main'文件目录下的,但是你可以根据不同的构建类型(比如debug、release、alpha等)区分不同的源文件,这样对应建立的文件夹就是一个不同的构建源。打个比方,
debug
的构建源为src/debug
,release
的构建源为src/release
,而在src/main
定义的为公共资源,最后在构建时进行合并操作。
构建源的命名规则如下
src/main/
此源集包括所有构建变体共用的代码和资源。src/<buildTypes>/
创建这个源集来包括仅仅为一个具体的buildType
使用的代码和资源。示例:src/alpha
。src/<productFlavor>/
创建这个源集来包括仅仅为一个具体的productFlavor
使用的代码和资源。示例:src/baidu
。src/<productFlavorBuildType>/
创建此源集可加入特定构建变体专用的代码和资源。
例如,要生成应用的“baiduDebug”版本,构建系统需要合并来自以下源集的代码、设置和资源:
src/baiduDebug/
(构建变种源集)src/debug/
(构建类型buildType源集)src/baidu/
(productFlavor源集)src/main/
(main源集)
注意:当你在Android Studio中创建一个新的文件或者目录时,使用File->New菜单项,你可以为一个具体的源集创建它。你可以选择的这些源集是基于你的构建配置的,并且Android Studio自动创建需要的目录,如果它们不存在的话。
源集的优先级
如果不同的源集包含同一个文件的不同版本,当决定哪个文件使用的时候Gradle使用下面的优先级顺序。(在左边的源集会重写右边的源集文件和设置):
buildVariant > buildType > productFlavor > main source set > library dependencies
这可以让Gradle在构建的时候使用与具体构建变种相关的文件,当重用activity,应用逻辑,以及和其他版本通用的资源的时候。当merging multiple manifests的时候,Gradle使用同样的优先级顺序,因此每个构建变种可以定义不同的组件或者权限在最终的manifest文件中。
学习更多关于创建自定义源集,点击Create source sets for build variants。
参考:【译】Android构建配置
Android 多渠道打包配置
Android Studio Set of source 代码源集 源集创建等操作
官方文档