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


Coder 投稿 | mPaaS 的多版本接入(Android)的更多相关文章

  1. Unity - 接入Android SDK

    在网络上,关于Unity与Android如何进行交互,雨松MOMO大神已经有两篇文章简单介绍了如何操作(1)Unity3D研究院之打开Activity与调用JAVA代码传递参数(2)Unity3D研究 ...

  2. 让低版本的 Android 项目显示出 Material 风格的点击效果

    每天都被不同的需求纠缠的生活是幸福而又不幸的,这不我们家亲爱的设计师们又让我们在低版本的 Android 平台上实现一下类似于 Material Design 的点击效果. 虽然大家都知道 Mater ...

  3. Android开发学习总结(一)——搭建最新版本的Android开发环境

    Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...

  4. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  5. Android开发学习总结——搭建最新版本的Android开发环境

    原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...

  6. 搭建最新版本的Android开发环境

    只为成功找方法,不为失败找借口! Android开发学习总结(一)——搭建最新版本的Android开发环境 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Andr ...

  7. 使用清华大学开源软件镜像AOSP的“每月更新初始化包”更新指定版本的Android源码

    参照官方教程:Tsinghua Open Source Mirror 1. 下载了repo工具 mkdir  ~/bin PATH = ~/bin:$PATH curl  https://storag ...

  8. 装载 | Eclipse中搭建最新版本的Android开发环境

    文章目录 准备工作 下载文件 下载JDK并配置系统变量环境 下载安装Eclipse 下载Android SDK 下载ADT插件 使用下载好的软件搭建Android开发环境 安装Android的SDK ...

  9. 【转】Android开发学习总结(一)——搭建最新版本的Android开发环境

    最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1. ...

随机推荐

  1. NOI 2008 志愿者招募

    NOI 2008 志愿者招募 考虑用 $ p_i $ 表示第 $ i $ 天实际招收的人数,我们假设我们有三种志愿者,分别是 $ 1\to 2,1 \to 3 , 2\to 3 $ ,我们招手的人数分 ...

  2. [Linux]非root的R环境被conda破坏后如何恢复?

    记录说明 这篇文章本来是用来记录Linux非root环境下安装PMCMRplus包折腾过程,但后来试过了各种方法安装不上这个R包后,我换上了Miniconda来安装.经前人提醒,一开始安装Minico ...

  3. EXCEL excel中运用ctrl+D、ctrl+enter、ctrl+E批量填充数据

    在excel中,利用鼠标拖动可以快速向下或者向右填充序列或者复制单元格.但是利用快捷键也可以实现多种填充方式,本文就为大家介绍一些ctrl系列快捷键的填充,一起来看看吧. 封面tu 一,ctrl+D/ ...

  4. Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦

    Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...

  5. 模拟串口UART的实现

    我所祷告的,就是要你们的爱心,在知识和见识上,多而又多,使你们能分辨是非,做诚实无过的人,直到基督的日子.--腓立比书[1:9~10] 最近在调的MCU的型号为STM32F030,配置芯片相较之前的M ...

  6. gcc 引用math 库 编译的问题 解决方法

    1.gcc app.c -lm 其中lm表示的是连接 m forlibm.so / libm.a表示你想要的库 abc for libabc.so / libabc.a 其中.a表示的是静态链接库 . ...

  7. ssm框架整合 — 更新完毕

    1.spring整合mybatis 数据表自行搭建 ,我的结构如下: 1).导入依赖 <!-- spring整合mybatis的依赖 --> <!-- 1.spring需要的依赖 - ...

  8. 巩固javaweb的第三十天

    显示用户输入信息 1 .代码 要想输出用户在上一个页面提交的信息,可以使用下面的代码: ${param.userid} ${param.username} ${param.userpass} ${pa ...

  9. ViewStub应用

    在开发应用程序的时候,会遇到这样的情况,在运行时动态的根据条件来决定显示哪个View或哪个布局,可以把可能用到的View都写在上面,先把他们的可见性设置为View.GONE,然后在代码中动态的更改它的 ...

  10. Java 设计模式--策略模式,枚举+工厂方法实现

    如果项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一.什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决 ...