Android Gradle 技巧之一: Build Variant 相关

Build Variant

android gradle 插件,允许对最终的包以多个维度进行组合。

BuildVariant = ProductFlavor x BuildType

两个维度

最常见的就是这样:

    productFlavors {
        pro {
        }

        fre {
        }
    }
    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
        }
        release {
        }
    }

其中,buildTypes 一般都会有 debug 或者release,标示编译的类型,通常在混淆代码、可调式、资源压缩上做一些区分。
productFlavor 则为了满足“同一个project,根据一个很小的区分,来打不同的包”这个需求。

这两个维度的组合,会产生如下包:

  • proDebug
  • proRelease
  • freDebug
  • proRelease

更多的维度

    flavorDimensions 'abi', 'version'

    productFlavors {
        pro {
            dimension 'version'
        }

        fre {
            dimension 'version'
        }

        arm {
            dimension 'abi'
        }

        mips {
            dimension 'abi'
        }
    }

    buildTypes {
        debug {
        }
        release {
        }
    }

productFlavor 本身定义了2个维度,记上 buildType,则有三个维度,会产生如下的包:

  • armProDebug
  • armProRelease
  • armFreDebug
  • armFreRelease
  • mipsProDebug
  • mipsProRelease
  • mipsFreDebug
  • mipsFreRelease

其中每个维度组合,都可以设置本身的 dependency、test source。下面做一个举例。

Flavor 与 Dependency

需求

module 中有若干个 flavors,例如:fre 和 pro,分别依赖不同的库,这些库有的是本地 jar 库,有的是远程库。

方案

flavor-dependency

遍历 Build Variant

需求

Bugtags 的 android sdk,有一个自动上传符号表功能, 在最初,是这样配置的:

  apply plugin: 'com.bugtags.library.plugin'
  bugtags {
      appKey "APP_KEY"
      appSecret  "APP_SECRET"
      mappingUploadEnabled false
  }

后来,我们增加了一个 beta-live 的机制,用来区分测试和上线的 APP,这样,同一个 APP,就有两套 APP_KEY 和 APP_SECRET 了,很明显上方的配置方式就不在适用。

方案

android gradle 插件提供了 android.applicationVariants 索引来遍历所有的 build variant
后来,我们采取了一个方案,遍历 Build Variant,设置 extension 信息来兼容这种需求。

  afterEvaluate {
      android.applicationVariants.each { variant ->
          def bugtagsAppKey = null;
          def bugtagsAppSecret = null;

          if (variant.name.contains("debug")) {
              bugtagsAppKey = 'APP_KEY_BETA'
              bugtagsAppSecret = 'APP_SECRET_BETA'
          } else if (variant.name.contains("release")) {
              bugtagsAppKey = 'APP_KEY_LIVE'
              bugtagsAppSecret = 'APP_SECRET_LIVE'
          }

          variant.ext.bugtagsAppKey = bugtagsAppKey
          variant.ext.bugtagsAppSecret = bugtagsAppSecret
      }
  }

  apply plugin: 'com.bugtags.library.plugin'

总结

本文主要是介绍了 build variant 的概念,还介绍了两个日常应用案例。希望对大家有帮助。

参考资料

android-build-tool

有问题?在文章下留言或者加 qq 群:453503476,希望能帮到你。

想要及时收到最新博客文章,请关注:

『mobdev』微信公众号二维码

mobdev

转载于:https://www.cnblogs.com/Bugtags2015/p/5563427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值