【Android-混合开发】mPaas-多版本接入篇

对于 mPaas 的常规接入,这里就不赘述了。因为比较简单,根据 官方文档 就可以完美接入了。(可以在 Android Studio 中,接入 mPaas 插件,这样可以更快,更方便的接入)

经历完上面的步骤,我以为看到了胜利的曙光。突然,CTO 跟 iOS 的同事说:“Android 既然接好了,那 iOS 这边也接 mPaas,不过 iOS 这边存在坑,就是公司项目采用了在一个 TARGETS 下可以打出多个应用。但是一个 TARGETS 只能配置一个 mPaas 的 config 文件。” 迟疑3秒后,我才发现Android 当时我搭架构的时候,也是为了能提高开发效率,采用了相似的方式。( Build 变体 )就此,进入了本篇的【困难模式】打怪升级。


本篇主要解决 如何在 多版本 的模式下,接入 mPaas。

经过一系列的尝试(已经记不清耗时多久,反正给我造成了一定的压力),发现只需要在不同的 Build Variant(不同版本) 下导入不同的 App配置 即可。但是,这样很麻烦,就是每次打不同的 App 的时候,就要重新导入一次,这着实有点鸡肋。

然后结合mPaas官方的一个 多环境下配置mPaas的 文档。(关于 多版本,多环境,多渠道打包,可以看我另一篇文章【Android】手把手带你进入android打包的多版本,多环境,多渠道的踩坑之旅)在 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的目录结构,便于理解代码

看完上面的代码,思路为:

  1. 首先检查是否存在以.config为后缀的文件,如果有则删除。
  2. 然后将新的配置文件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
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
要在Android Studio开发环境搭建中创建一个Activity,你可以按照以下步骤进行操作: 1. 首先,在Android Studio中打开你的项目。 2. 在项目的资源视图中,右键点击"app"文件夹,选择"New",然后选择"Activity"。 3. 在弹出的对话框中,选择你想要创建的Activity类型,比如"Empty Activity"或"Basic Activity"。 4. 给你的Activity命名,并选择相关的选项,比如是否生成布局文件等。 5. 点击"Finish"按钮,Android Studio会自动生成相应的代码和布局文件。 6. 在生成的Activity类中,你可以添加你的业务逻辑和界面设计。 7. 如果需要,在AndroidManifest.xml文件中注册你的Activity,以便在应用程序中能够访问它。 这样,你就成功Android Studio开发环境中创建了一个Activity。你可以根据你的需求在这个Activity中添加更多的功能和界面设计。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android开发相关的学习资料](https://download.csdn.net/download/m0_57840386/85431994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Android Studio开发环境的搭建](https://blog.csdn.net/weixin_41957626/article/details/127336213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Android Studio开发环境搭建](https://blog.csdn.net/weixin_64192827/article/details/127044187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q-CODER

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值