利用gradle自动切换API host

公司建立了多个服务器区分测试环境和生产环境,每次发版时如果稍不注意就会用错host,甚至可能造成发布到线上的却使用了测试环境host的大错。利用gradle可以帮助我们自动化切换host。 网上大部分教程都是在app目录下直接添加BuildConfig的字段来实现,因为我把网络层抽离出来成一个单独的module,相对于稍微复杂一点,以此博文记录一下过程。

在module中建立多个flavor

在目标module的目录下找到build.gradle打开

android{
  // 设置默认的flavor 一个flavor分debug和release,这里随意挑一个即可 因为我要用到的buildConfigField不需要区分
  defaultPublishConfig "my_testDebug"
  // 具体作用不明,但是不设置会报错
  publishNonDefault true
  // 建立多个flavor
  productFlavors{
    my_test {
      buildConfigField "boolean", "API_HOST", "true"
    }
    my_release {
      buildConfigField "boolean", "API_HOST", "false"
    }
  }
}

这样就完成了在module目录中建立多个flavor的工作,接下来只需要在打包时使用对应的flavor即可。

在app中调用module指定的flavor

在主应用目录app/下找到build.gradle文件打开

android{
  productFlavors{
    app_test{}
    app_release{}
  }
}
dependencies{
  // 需要注意的是,不再是compile,把指定渠道的名字加在前面。
  app_testCompile project(path: 'moduleName', configuration: 'my_testDebug')
}

如此已经大功告成。最后就在module中需要的地方调用变量。

String host;
if (BuildConfig.API_HOST) {
  host = RELEASE_HOST;
}else {
  host = TEST_HOST;
}
new Retrofit.Builder()
  .baseUrl(host)
  .build();

总结

结果总是很简单,但过程中要查询多方资料。官网总是写的很简陋,很多实用的功能并没有给出使用方式,一定要科学上网啊!

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。