mPaas Android多套开发环境间切换

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
mPaaS订阅基础套餐,标准版 3个月
简介: 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拷贝对应目录。


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

目录
相关文章
|
2月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
172 2
|
2月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
51 2
|
1月前
|
开发工具 Android开发 开发者
Android开发环境搭建
如何搭建Android开发环境,包括下载和安装Android Studio、配置SDK、创建新的Android工程项目等。
94 0
Android开发环境搭建
|
1月前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
26 3
|
1月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性对比:哪个更适合企业环境?
在数字化时代,移动设备已成为企业日常运营不可或缺的一部分。选择合适的操作系统对于保障企业数据安全至关重要。本文深入分析了Android和iOS两大主流操作系统的安全性,从系统架构、安全功能、应用生态及更新频率四个维度进行全面比较,旨在为企业提供一个清晰的决策依据,帮助企业在Android的开放性与iOS的封闭性之间找到最适合自身需求的平衡点。
61 6
|
2月前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
|
1月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境的差异性分析
【10月更文挑战第8天】 本文旨在探讨Android和iOS两大移动操作系统在开发环境上的不同,包括开发语言、工具、平台特性等方面。通过对这些差异性的分析,帮助开发者更好地理解两大平台,以便在项目开发中做出更合适的技术选择。
|
1月前
|
开发工具 Android开发 iOS开发
安卓与iOS开发环境深度对比
【10月更文挑战第1天】本文旨在探讨和分析安卓(Android)与苹果(iOS)两大主流移动操作系统在应用开发环境上的不同点。通过比较它们的开发工具、语言、用户体验设计、市场策略及生态系统,本文将为开发者提供一份详尽的参考指南,帮助他们做出更合适的开发平台选择。此外,文章还将探讨两大平台未来的发展趋势,以及这些趋势可能对开发者和用户产生的影响。
51 0
|
2月前
|
IDE Java Android开发
安卓与iOS开发环境的差异及其对开发者的影响
在数字时代的浪潮中,移动应用成为人们生活的延伸。两大操作系统——安卓与iOS,如同两座技术高峰,各自占据着半壁江山。本文将探索这两个平台的开发环境差异,并讨论这些差异如何塑造开发者的编程习惯与职业选择。我们将从工具和语言、用户界面设计、系统架构、市场定位以及开发社区和资源五个方面进行比较,旨在为开发者提供一份实用的指南,帮助他们在不断变化的技术世界中,找到适合自己的发展路径。
55 3
|
2月前
|
移动开发 Android开发 Swift
安卓与iOS开发环境对比:选择合适的平台
在数字时代的浪潮中,移动应用开发成为技术前沿的热门领域。两大主流操作系统——安卓和iOS,各自拥有独特的开发环境与生态。本文将深入探讨这两种平台的开发特点,帮助开发者根据自己的需求和资源选择最合适的开发路径。从工具支持到用户群体,从编程语言到市场分布,我们将一一剖析,为即将踏上移动开发之旅的朋友们提供一盏明灯。
下一篇
无影云桌面