本文作者:mPaaS 用户「Q-Coder」

同时欢送更多的开发者向 mPaaS 投稿

原文:blog.csdn.net/yqq577/article/details/116801705

前言

对于 mPaaS 的惯例接入,这里就不赘述了。

因为比较简单,依据官网文档就能够完满接入了。或者能够在 Android Studio 中,接入 mPaaS 插件,这样能够更快、更不便的接入。

经验完下面的接入步骤,我认为看到了胜利的曙光。忽然,CTO 跟 iOS 的共事说:

“Android 既然接好了,那 iOS 这边也接 mPaaS,不过 iOS 的难点是,公司我的项目采纳了在一个 TARGETS 下能够打出多个利用,但一个 TARGETS 只能配置一个 mPaaS 的 config 文件。”(编者注:该问题能够通过手动替换配置文件和图片的形式解决,详情可钉钉搜寻“33214637”征询技术支持同学)

踌躇三秒后,我才发现 Android 过后我搭架构的时候,也是为了能进步开发效率,采纳了类似的形式——Build 变体。

就此,进入了本文解决“如何在多版本的模式下,接入 mPaaS”问题的【艰难模式】。

艰难模式

通过一系列的尝试(曾经记不清耗时多久,反正给我造成了肯定的压力),发现只须要在不同的 Build Variant(不同版本)下导入不同的 App 配置即可。

然而,这样很麻烦,每次打不同的 App 的时候,就要从新导入一次,这着实有点鸡肋。

而后,联合 mPaaS 官网的一个 多环境下配置 mPaaS 的文档。在 gradle 下动静配置不同 App 的配置文件。

重头戏来了--官网 demo 中主 module 下的 gradle

//配置mPaaS App 开发环境,将 .config 配置文件拷贝到主Module下def setAppConfigEnv(String type){    //先把原有的配置文件删除    File configFile = file("${rootDir}/app").listFiles().find{File f ->        f.name.endsWith(".config")    }    if(configFile != null && configFile.exists()){        delete(configFile)    }   //将不同目录下的文件,拷贝到壳我的项目下,用于打包    copy {        from "buildEnv/${type}"        into "${rootDir}/app"        include "**/*.config"    }}

这里贴出下面demo的目录构造,便于了解代码

看完下面的代码,思路为:

  • 首先查看是否存在以.config为后缀的文件,如果有则删除。
  • 而后将新的配置文件copy到指定地位。

然而 demo 中,并不是动静的,因为 setAppConfigEnv('dev'),其实还是在代码中写死了。

所以,咱们只须要动静的拿到Flavor的值就能够了。

def getCurrentFlavor() {    Gradle gradle = getGradle()    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()    Pattern pattern    if (tskReqStr.contains("assemble"))        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")//Release和Debug这个具体依据本人的环境名进行填写    else        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")    Matcher matcher = pattern.matcher(tskReqStr)    if (matcher.find())        return matcher.group(1).toLowerCase()    else {        println "NO MATCH FOUND"        return ""    }}

最初只须要在 buildTypes 像上面那样调用就行了

buildTypes {    setAppConfigEnv(getCurrentFlavor())    ...}

高枕无忧!

经验了这次事件,我感觉接下来要开始学习 Gradle 这个货色。相熟 Gradle 对于前面的需要就能更好的应酬了。

外围的内容都在下面了,如果还有一些细节上存在疑难。能够留言或者私信,我将很乐意为您解答。

笔记

在下面的历程中,用到了可能在多版本下,罕用的办法。记录下来

  1. 如何获取以后 Flavor
def getCurrentFlavor() {    Gradle gradle = getGradle()    String  tskReqStr = gradle.getStartParameter().getTaskRequests().toString()    Pattern pattern;    if( tskReqStr.contains( "assemble" ) )        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")    else        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")    Matcher matcher = pattern.matcher( tskReqStr )    if( matcher.find() )        return matcher.group(1).toLowerCase()    else    {        println "NO MATCH FOUND"        return "";    }}
  1. 如何获取以后 Flavor 的 applicationId
def getCurrentApplicationId() {    def currFlavor = getCurrentFlavor()    def outStr = ''    android.productFlavors.all{ flavor ->        if( flavor.name==currFlavor )            outStr=flavor.applicationId    }    return outStr}

年末拉个票

mPaaS 正在加入「2021稀土掘金年度人气创作团队榜单」,欢送宽广 mPaaS Coder 扫描下方二维码,为 mPaaS 投出您贵重的一票。