乐趣区

关于android:Coder-投稿-mPaaS-的多版本接入Android

本文作者: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 投出您贵重的一票。


退出移动版