Android 开发技术分享

gradle自定义构建类型 BuildType

2020-09-08  本文已影响0人  waiwaaa

最近更新应用,由于应用商店审核各平台不一致,有些平台应用名必须与软著上的名称完全一致,因此要针对的多发布一个版本的包,由此接触到自定义构建类型 BuildType,发现这一块有些地方稍不注意的话会被绕进去浪费点时间。既然我这边已经花费时间了,也许接下来分享的 tips 可能会帮你节省些时间。

BuildType的新建

只需按正常的加在buildTypes里就可以了

android {
  buildTypes {
      release {
       }
       debug{
       }
       midrelease{
       //这里添加一些buildType的一些属性。   
       }
 }
 }

可以调用midrelease.initWith(release)来基于release来新建。
initWith() 是 BuildType 的一项配置项,我们还可以看到上文中提到的buildConfigField其实也是一项配置项。该配置可以理解成initWith(release) 可以理解成拷贝了 release 这一构建类型的所有变量,因为我们知道,每一个构建类型都有一些默认的变量,例如debuggablezipAlignEnabled等,使用该配置就免去为新增的构建类型定义所有的变量。

问题

如果你的应用是单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 构建类型

上一篇下一篇

猜你喜欢

热点阅读