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 对于后面的需求就能更好的应付了。
核心的内容都在上面了,如果还有一些细节上存在疑问。可以留言或者私信,我将很乐意为您解答。
笔记
在上面的历程中,用到了可能在多版本下,常用的方法。记录下来
- 如何获取当前 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 投出您宝贵的一票。



Coder 投稿 | mPaaS 的多版本接入(Android)的更多相关文章
- Unity - 接入Android SDK
在网络上,关于Unity与Android如何进行交互,雨松MOMO大神已经有两篇文章简单介绍了如何操作(1)Unity3D研究院之打开Activity与调用JAVA代码传递参数(2)Unity3D研究 ...
- 让低版本的 Android 项目显示出 Material 风格的点击效果
每天都被不同的需求纠缠的生活是幸福而又不幸的,这不我们家亲爱的设计师们又让我们在低版本的 Android 平台上实现一下类似于 Material Design 的点击效果. 虽然大家都知道 Mater ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持
IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...
- Android开发学习总结——搭建最新版本的Android开发环境
原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...
- 搭建最新版本的Android开发环境
只为成功找方法,不为失败找借口! Android开发学习总结(一)——搭建最新版本的Android开发环境 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Andr ...
- 使用清华大学开源软件镜像AOSP的“每月更新初始化包”更新指定版本的Android源码
参照官方教程:Tsinghua Open Source Mirror 1. 下载了repo工具 mkdir ~/bin PATH = ~/bin:$PATH curl https://storag ...
- 装载 | Eclipse中搭建最新版本的Android开发环境
文章目录 准备工作 下载文件 下载JDK并配置系统变量环境 下载安装Eclipse 下载Android SDK 下载ADT插件 使用下载好的软件搭建Android开发环境 安装Android的SDK ...
- 【转】Android开发学习总结(一)——搭建最新版本的Android开发环境
最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1. ...
随机推荐
- 洛谷 P5406 - [THUPC2019]找树(FWT+矩阵树定理)
题面传送门 首先看到这道题你必须要有一个很清楚的认识:这题新定义的 \(\oplus\) 符号非常奇怪,也没有什么性质而言,因此无法通过解决最优化问题的思路来解决这个问题,只好按照计数题的思路来解决, ...
- Educational Codeforces Round 89 题解
昨晚简单 vp 了场比赛找了找状态,切了 5 个题(有一个差点调出来),rk57,还算理想吧,毕竟我已经好久没碰过电脑了( A 签到题不多说,直接输出 \(\min\{a,b,\dfrac{a+b}{ ...
- Perl 语言入门1-5
第一章 简介 perl -v 文字处理,编写小型CGI脚本(Web服务器调用程序)的最佳语言 CPAN: Perl综合典藏网 shebang: #! /usr/bin/perl 或#! /usr/lo ...
- 【Linux】非root安装Python3及其包管理
1. Python 3.8.1安装 源码安装常规操作: wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz tar -xv ...
- C语言计算fastq文件GC含量2
改进了一下,利用zlib可以读取gz格式的压缩文件,也可以直接计算非压缩格式 #include <stdio.h> #include <stdlib.h> #include & ...
- 44-Count and Say
Count and Say My Submissions QuestionEditorial Solution Total Accepted: 79863 Total Submissions: 275 ...
- 39-Remove Duplicates from Sorted Array
Remove Duplicates from Sorted Array My Submissions QuestionEditorial Solution Total Accepted: 127836 ...
- Identity Server 4 从入门到落地(五)—— 使用Ajax访问Web Api
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- 取gridview中textbox的值【C#】
<asp:GridView ID="gridView" runat="server" OnRowCommand="gridView_RowCom ...
- centos7安装Docker详细步骤(无坑版教程)
一.安装前必读 在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可. 注意:本文的命令使用的是 root 用户登录执行,不 ...