最近更新应用,由于应用商店审核各平台不一致,有些平台应用名必须与软著上的名称完全一致,因此要针对的多发布一个版本的包,由此接触到自定义构建类型 BuildType,发现这一块有些地方稍不注意的话会被绕进去浪费点时间。既然我这边已经花费时间了,也许接下来分享的 tips 可能会帮你节省些时间。
BuildType的新建
只需按正常的加在buildTypes
里就可以了
android {
buildTypes {
release {
}
debug{
}
midrelease{
//这里添加一些buildType的一些属性。
}
}
}
可以调用midrelease.initWith(release)
来基于release来新建。
initWith()
是 BuildType 的一项配置项,我们还可以看到上文中提到的buildConfigField
其实也是一项配置项。该配置可以理解成initWith(release)
可以理解成拷贝了 release 这一构建类型的所有变量,因为我们知道,每一个构建类型都有一些默认的变量,例如debuggable
、zipAlignEnabled
等,使用该配置就免去为新增的构建类型定义所有的变量。
问题
如果你的应用是单moudle,那么像上面那一步就可以了。但如果是多moudle的话,那就会提示在引用的moudle中找不到对应的buildType
了。怎么办呢?当然是每在moudle里都加一遍就可以了。什么,moudle太多了,有没有简单点的方法呢?这个还真有。
在 buildTypes
中定义 matchingFallbacks
,可以指定在子模块中没找到对应的构建类型时要加载哪个类型
//app 模块下的 build.gradle 中
buildTypes {
debug {
}
release {
}
midrelease.initWith(release)
midrelease {
matchingFallbacks = [ 'debug', 'release']
}
}
当执行gradle assemblePre
构建 midrelease
版本时,而某个子模块又没有定义 midrelease
版本,则会按照你指定的 matchingFallbacks
从前往后依次寻找,直到类型匹配。productFlavors
也可以指定matchingFallbacks
。
详细的BuildType属性可以参考Android Studio BuildType 构建类型
网友评论