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