mPaas Android多套开发环境间切换

简介: mPaaS Android 提供了多套开发环境间切换的能力,能够帮助开发者在多套开发环境下(⽐如:开发dev/测试test/体验uat/线上prod)方便自如地进行切换。
+关注继续查看

1. 背景


mPaaS Android 提供了多套开发环境间切换的能力,能够帮助开发者在多套开发环境下(⽐如:开发dev/测试test/体验uat/线上prod)方便自如地进行切换。


1.1 涉及mPaaS的改动


对于mPaaS开发者,在切换开发环境的过程中,涉及到以下配置文件的改动:


  • mPaaS项目配置:项⽬中.config配置文件Ant-mpaas-xxx-Android.config,配置在portal的app⽬录下,用于存放应用推送服务地址、网关服务地址等;参考⽂档:https://tech.antfin.com/docs/2/86439
  • rpc数据加密配置:项目中mpaas_netconfig.properties配置⽂件,配置在portalassets⽬录下,⽤于存 放rpc数据加密方式、加密公钥等,参见文档档:https://tech.antfin.com/docs/2/72752#Android 配置
  • H5容器配置:项⽬目中custom_config.json配置文件,配置在portalassets目录下,⽤于存放离线包验签开关、沉浸标题栏开关等,参⻅文档:https://tech.antfin.com/docs/2/118673
  • 离线包验签公钥:项目中利用公钥对离线包进行解密,配置在代码中,通过Nebula组件进行设置;参见文档:https://tech.antfin.com/docs/2/64580#
  • UCSDK key:项⽬中使用UC内核时需要申请,配置在AndroidManifest⽂件中;参见文 档:https://tech.antfin.com/docs/2/112551


切换开发环境时,需要将项⽬中涉及到的上述配置的地⽅进行手动替换或者修改。下一小节将介绍如何通过gradle配置实现开发环境的自有切换。


2. 解决方案


切换开发环境需要修改的这些配置有两种:


  • 纯配置文件(mPaaS项目配置、rpc数据加密配置、H5容器配置文件)。
    • 这类配置,可以在编译期通过gradle脚本进行配置文件替换。
  • 代码中的配置(离线包验签公钥、UCSDK key)。
    • 这类配置,可以将其写在配置文件中,通过读取配置文件进行切换操作。


2.1. 准备工作


  • 在portal-app下,根据项目需求新建各个开发环境目录,存放不同环境的配置文件;
  • 将各个环境的mPaaS项目配置拷贝到对应环境的目录下;
  • 如果有rpc数据加密配置需要切换,将mpaas_netconfig.properties拷贝对应目录;
  • 如果有H5容器配置需要切换,将custom_config.json拷贝对应目录。
    image


2.2. 配置文件的切换


2.2.1. 切换 mPaaS 项目配置


在portal-app的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"

    }

}


2.2.2. 切换 rpc 数据加密配置


在portal-app的gradle中配置


//配置RPC数据加密开发环境,将配置文件拷贝到assets资源目录下

def setNetConfigEnv(String type){

    copy {

        from "buildEnv/${type}/mpaas_netconfig.properties"

        into "${rootDir}/app/src/main/assets"

    }

}


2.2.3. 切换 H5 容器配置


在portal-app的gradle中配置


//配置离线包开发环境,将配置文件拷贝到assets资源目录下

def setNebulaEnv(String type){

    copy {

        from "buildEnv/${type}/custom_config.json"

        into "${rootDir}/app/src/main/assets/config"

    }

}


2.3.  代码配置的切换


2.3.1. 切换离线包验签公钥


  1. 将离线包验签密钥写入H5容器配置的custom_config.json文件中;


[

  {

    "value": "YES",

    "key": "h5_shouldverifyapp"

  },

  {

    "value": "your public key",

    "key": "h5_shouldverifyapp_pubkey"

  }

]


  1. 通过读取H5容器配置获取离线包验签公钥,通过切换 H5容器配置实现切换离线包验签公钥;


 /**

     * 根据H5容器配置文件解析离线包验签公钥

     * @return 离线包验签公钥

     */

    public String getAppVerificationPubkey(){

        String configStr = getFromAssets("config/custom_config.json");

        JSONArray jsonArray = JSON.parseArray(configStr);

        if(jsonArray != null && jsonArray.size() > 0){

            for (int i = 0; i < jsonArray.size(); i++) {

                JSONObject jsonObject = jsonArray.getJSONObject(i);

                String key = jsonObject.getString("key");

                if(key.equals("h5_shouldverifyapp_pubkey")){

                    String value = jsonObject.getString("value");

                    return value;

                }

            }

        }

        return null;

    }



 /**

     * 获取portal assets目录文件内容

     * @param fileName 文件名称

     * @return 文件内容

     */

    public String getFromAssets(String fileName){

        try {

            MicroApplicationContext context = MPFramework.getMicroApplicationContext();

            InputStreamReader inputReader = new InputStreamReader(context.getApplicationContext().getResources().getAssets().open(fileName));

            BufferedReader bufReader = new BufferedReader(inputReader);

            String line= "";

            String Result= "";

            while((line = bufReader.readLine()) != null)

                Result += line;

            return Result;

        } catch (Exception e) {

            e.printStackTrace();

        }

        return null;

    }


  1. 设置离线包验签公钥


    String pubkey = getAppVerificationPubkey();

    if(!TextUtils.isEmpty(pubkey)){

        MPNebula.enableAppVerification(pubkey);

    }


2.3.2. 切换 UCSDK key


UCSDK key 存放在AndroidManifest.xml中;


...

...


可以通过在portal-app的gradle中配置manifestPlaceholders进行切换:


buildTypes {

    release {

        manifestPlaceholders = [GRADLE_APP_UCKEY : 'your release uc key']

        ...

    }

    debug {

        ...

        manifestPlaceholders = [GRADLE_APP_UCKEY : 'your debug uc key']

        ...

    }

}


2.4. 开发环境的切换


portal-app的gradle中配置,通过调用该方法,传入环境参数实现自动切换


// 根据环境类型切换开发环境

// type = dev/test/uat/prod 可根据配置目录自由扩展

def switchBuildEnv(String type){

    setAppConfigEnv(type)

    if(file("buildEnv/${type}/custom_config.json").exists()){

        setNebulaEnv(type)

    }

    if(file("buildEnv/${type}/mpaas_netconfig.properties").exists()){

        setNetConfigEnv(type)

    }

}


2.5. 使用示例


portal-app的 gradle 中调用切换方法


buildTypes {

  // 切换开发环境

    switchBuildEnv('prod')

    release {

        ...

    }

    debug {

        ...

    }

}


示例项目:
mPaaS_android_60_mPaaS_EenSwitchSample_.zip

相关文章
|
28天前
|
Web App开发 开发工具 Android开发
Android平台不需要单独部署流媒体服务如何实现内网环境下一对一音视频互动
我们在做内网环境的一对一音视频互动的时候,遇到这样的技术诉求:如智能硬件场景下(比如操控智能硬件),纯内网环境,如何不要单独部署RTMP或类似流媒体服务,实现一对一音视频互动。
|
3月前
|
Java 测试技术 Android开发
|
8月前
|
前端开发 Android开发
react native使用4-搭建安卓环境1
react native使用4-搭建安卓环境1
231 0
react native使用4-搭建安卓环境1
|
10月前
|
缓存 Java 测试技术
移动设备交互应用 实验一 熟悉Android编程开发环境
移动设备交互应用 实验一 熟悉Android编程开发环境
130 0
移动设备交互应用 实验一 熟悉Android编程开发环境
|
12月前
|
Java Android开发
移动应用程序设计基础——Android环境构建与Activity生命周期
安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 5、 完成智能手机开发平台安装、以及相关配置; 6、 并实现Hello World; 7、 添加Log日志,通过Log日志验证Ac 1、 安装JAVA JDK 2、 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。 3、 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。 4、 设置生命周期的Log日志,分别执行相关操作
155 0
移动应用程序设计基础——Android环境构建与Activity生命周期
|
数据采集 Java Android开发
Python爬虫:mac环境apktool反编译Android安卓代码
Python爬虫:mac环境apktool反编译Android安卓代码
141 0
|
Java 开发工具 Android开发
Android Studio OpenCV 4.5.2环境搭建
Android Studio OpenCV 4.5.2环境搭建
377 0
|
Java Android开发
|
Java 测试技术 Android开发
App一键切换url环境、一键打包__Android (Java)
App一键切换url环境、一键打包__Android (Java)
385 0
App一键切换url环境、一键打包__Android (Java)
|
物联网 Android开发
Android物联网应用程序开发(智慧城市)—— 环境状态值范围设置界面开发
Android物联网应用程序开发(智慧城市)—— 环境状态值范围设置界面开发
231 0
Android物联网应用程序开发(智慧城市)—— 环境状态值范围设置界面开发
推荐文章
更多