本文作者: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 对于前面的需要就能更好的应酬了。
外围的内容都在下面了,如果还有一些细节上存在疑难。能够留言或者私信,我将很乐意为您解答。
笔记
在下面的历程中,用到了可能在多版本下,罕用的办法。记录下来
- 如何获取以后 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 ""; }}
- 如何获取以后 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 投出您贵重的一票。