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