鸿蒙应用如何配置多环境

大家好,我是simple。我的理想是利用科技手段来解决生活中遇到的各种问题

前言

众所周知,开发证书和发布证书并不是通用的。而上架过app的同学都知道,上架基本上不可能一次性成功,而且日常更新的过程中,日常开发与维护也会有时常上架更新app的场景。但是每次上架app都需要切换证书,再打包。

但证书特多,每次切换也是个大工程,要是忘了换哪个证书,上架被打回还是小事,万一误了抢救线上bug的时间,就大事不妙了。

以及环境的改变,有些变量也需要跟着变化,比如线上地址,这些要是忘了改,也得遭老罪了。

所以在开发中,配置多套证书、环境变量控制也是有需求的。

配置多套环境

我们需要在全局的build-profile.json5里面配置app.products,使其可以打包出多套产品。如下:

json 复制代码
"products": [
  {
    "name": "default",// 切记products里面至少要有一个default
    "signingConfig": "default",
    "compatibleSdkVersion": "5.0.0(12)",
    "runtimeOS": "HarmonyOS",
    "buildOption": {
      "strictMode": {
        "caseSensitiveCheck": true,
        "useNormalizedOHMUrl": true
      }
    }
  },
  {
    "name": "release",
    "signingConfig": "release",
    "compatibleSdkVersion": "5.0.0(12)",
    "runtimeOS": "HarmonyOS",
    "buildOption": {
      "strictMode": {
        "caseSensitiveCheck": true,
        "useNormalizedOHMUrl": true
      }
    }
  }
]

添加一套新的签名release(这个名称需要与上文的signingConfig对应)

在modules里面再配置一个target,让phone入口有对应的product

json 复制代码
{
  "name": "phone",
  "srcPath": "./entry",
  "targets": [
    {
      "name": "default",
      "applyToProducts": [
        "default"
      ]
    },
    {
      "name": "release",
      "applyToProducts": [
        "release"
      ]
    }
  ],
},

配置entry目录下的build-profile.json5,更改targets配置

json 复制代码
[
    {
      "name": "default"
    },
    {
      "name": "release"
    },
]

这样就已经完成了多套签名的配置了,如果需要切换签名,只需要点击右上角的product图标即可。

定义环境变量

鸿蒙项目不是前端项目,没有.env文件,也没有--mode=production。

上述我们已经知道了如何打多个包。此时我们只需要知道我们现在打的包是release还是default,那我们就可以自己进行环境的区分了。

正常情况下,我们并不能知道当前是在哪个方式进行打包,但是HAR运行时会获取编译构建参数,生成BuildProfile类文件,所以我们可以曲线救国,进行环境的区分。我们在har包中引入BuildProfile文件

ts 复制代码
import BuildProfile from '../../../../BuildProfile';
const isRelease = (BuildProfile.BUILD_MODE_NAME as string) === 'release';

此时我们在配置一些json文件,然后通过isRelease变量或者声明一个映射就可以对当前环境进行判断。

总结

大概步骤如下: 1.鸿蒙开发中配置多套证书与环境变量。 2.在配置多套环境上,于全局 build-profile.json5 配置、app.products 等,完成多套签名配置,切换签名。 3.定义环境变量时,借助 HAR 运行引入 BuildProfile 文件判断打包环境。

相关推荐
小雨青年43 分钟前
鸿蒙 HarmonyOS 6 | 系统能力 (06) 构建现代化通知体系 从基础消息到实况
华为·harmonyos
木斯佳1 小时前
HarmonyOS 6实战(源码解析篇):音乐播放器的音频焦点管理(上)——AudioSession与打断机制
华为·音视频·harmonyos
2601_949593652 小时前
基础入门 React Native 鸿蒙跨平台开发:卡片组件
react native·react.js·harmonyos
qq_177767373 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767373 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
烬头88214 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos
qq_177767374 小时前
React Native鸿蒙跨平台通过Animated.Value.interpolate实现滚动距离到动画属性的映射
javascript·react native·react.js·harmonyos
qq_177767375 小时前
React Native鸿蒙跨平台实现消息列表用于存储所有消息数据,筛选状态用于控制消息筛选结果
javascript·react native·react.js·ecmascript·harmonyos
ujainu6 小时前
Flutter + OpenHarmony 实战:从零开发小游戏(三)——CustomPainter 实现拖尾与相机跟随
flutter·游戏·harmonyos
拉轰小郑郑7 小时前
鸿蒙ArkTS中Object类型与类型断言的理解
华为·harmonyos·arkts·openharmony·object·类型断言