简介
buildTypes 位于模块级build.gradle文件的android{}代码块内,它是用来创建和配置构建类型的。新建一个项目在模块的buildTypes代码块中会默认生成debug和release两个版本。
代码块
这是我代码里的配置,大家可以按需所配。
/**
* app模块下的build.greadle
*/
android {
//签名配置
signingConfigs {
release {
、、、、、、、、、、、、、
}
debug {
、、、、、、、、、、、、、
}
}
//构建类型配置
buildTypes {
//测试版本
debug {
/* 签名类型 */
signingConfig signingConfigs.debug
/* 是否开启代码混淆,默认false */
minifyEnabled false
/* 是否应该生成可调试的apk */
debuggable true
/* 混淆规则配置文件 */
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
/* 自定义buildType */
buildConfigField 'String', 'BASE_URL', '"http://api-debug.**/"'
}
//生产版本
release {
/* 签名类型 */
signingConfig signingConfigs.release
/* 是否开启代码混淆,默认false */
minifyEnabled false
/* 是否应该生成可调试的apk */
debuggable false
/* 移除无用的resource文件 */
shrinkResources true
/* 混淆规则配置文件 */
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
/* 自定义buildType */
buildConfigField 'String', 'BASE_URL', '"http://api-release.**/"'
}
//预生产版本
/* 从给定的构建类型复制所有属性 */
pre.initWith(release)
pre {
buildConfigField "String", "BASE_URL", "http://api-pre.**/"
matchingFallbacks = ['pre', 'debug', 'release']
}
}
}
如何调用自定义buildType
public static final String BASE_URL = BuildConfig.BASE_URL;
打包
在控制台输入
gradle assembleDebug
gradle assemblePre
gradle assembleRelease
会生成相应版本的apk。比如控制台输入gradle assembleRelease,会生成下图apk。
Android Studio 3.0 和 Gradle 3.0带来的问题。
在 Gradle 2.x 时代,如果 app 中定义了 pre 类型,而子模块中没有定义,是不会报错的。但在 Gradle 3.0 下,如果你的 app 包含了新的自定义的 buildType,而依赖库中却没有相应的自定义 buildType,则编译阶段就会报错。
解决方案一:
在子模块中同样定义一个空pre{}类型
解决方案二:
matchingFallbacks,它可以指定在子模块中没找到对应的构建类型时要加载哪个类型
看如下代码:
//预生产版本
/* 从给定的构建类型复制所有属性 */
pre.initWith(release)
pre {
buildConfigField "String", "BASE_URL", "http://api-pre.**/"
matchingFallbacks = ['pre', 'debug', 'release']
}