HarmonyOS鸿蒙Next中要在APP内实现开发,测试,生产环境切换等Demo
HarmonyOS鸿蒙Next中要在APP内实现开发,测试,生产环境切换等Demo 【问题描述】:想要根据订阅系统环境变量变化能力,在APP内实现开发,测试,生产环境切换,寻求Demo
【问题现象】:不涉及
【版本信息】:不涉及
【复现代码】:不涉及
【尝试解决方案】:不涉及

更多关于HarmonyOS鸿蒙Next中要在APP内实现开发,测试,生产环境切换等Demo的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如果是在app内切换访问后台的域名环境:测试环境域名,生产环境域名,这种的话倒是可以的:
实现方式是这样:1. 将域名提取出来,通过方法来获取域名。2. 在切换域名的地方通过持久化缓存记录选择的域名环境,3. 最后在项目的启动页面,获取域名环境,并将这个值用在域名方法内,至此就达到了动态切换域名环境了。
其中最重要的一点:就是在切换完域名之后要重启下,使其生效。下面的是重启app的方法。
let wantInfo: Want = {
bundleName: 'bundleName',
abilityName: 'EntryAbility' // 启动项
};
getContext().getApplicationContext().restartApp(wantInfo);
更多关于HarmonyOS鸿蒙Next中要在APP内实现开发,测试,生产环境切换等Demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
小伙伴你好,在编译构建时,Hvigor 会生成 BuildProfile 类,开发者可以通过该类在运行时获取编译构建参数,也可以在 build-profile.json5 中通过 buildProfileFields 增加自定义字段,从而在运行时获取自定义的参数。
1.在工程级 build_profile.json5 中新增自定义编译构建产物,新增自定义编译构建参数。自定义参数 value 取值仅支持 number、string、boolean 类型。
{
"app": {
"products": [
{
"name": "default", // 默认产物名称
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
},
"arkOptions": {
"buildProfileFields": {
// 自定义构建参数,默认产物该参数设置为false。
"isAppTest": false
}
}
}
},
{
"name": "test", // 自定义产物名称
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"buildOption": {
"strictMode": {
"caseSensitiveCheck": true,
"useNormalizedOHMUrl": true
},
"arkOptions": {
"buildProfileFields": {
// 自定义编译构建参数,测试版本该参数设置为true。
"isAppTest": true
}
}
}
}
]
}
}
3.在工程级build-profile.json5中关联product。
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default",
"test", // 关联自定义product
]
}
]
}
]
5.在业务代码中获取自定义编译参数,根据不同的参数,执行不同分支。
import BuildProfile from 'BuildProfile';
if (BuildProfile.isAppTest) {
// 测试版本逻辑
} else {
// 正式版本逻辑
}
6.选择不同的product进行编译构建。
参考文档
鸿蒙Next应用内环境切换可通过配置管理模块实现。使用@ohos.app.ability.Configuration类管理不同环境配置,结合Stage模型的应用级配置。通过Preferences或轻量级存储保存环境标识,动态加载对应资源配置文件。利用条件编译和模块化设计隔离环境差异代码。
在HarmonyOS Next中实现多环境切换,可以通过配置管理结合环境变量来实现。以下是核心实现思路和代码示例:
1. 环境配置定义
创建EnvConfig.ets文件定义环境枚举和配置:
// EnvConfig.ets
export enum Environment {
DEV = 'dev',
TEST = 'test',
PROD = 'prod'
}
export const envConfigs = {
[Environment.DEV]: {
apiBaseUrl: 'https://dev.api.example.com',
logLevel: 'debug',
featureFlags: { /* 开发特性开关 */ }
},
[Environment.TEST]: {
apiBaseUrl: 'https://test.api.example.com',
logLevel: 'info',
featureFlags: { /* 测试特性开关 */ }
},
[Environment.PROD]: {
apiBaseUrl: 'https://api.example.com',
logLevel: 'warn',
featureFlags: { /* 生产特性开关 */ }
}
};
2. 环境管理类
创建EnvironmentManager.ets管理环境状态:
// EnvironmentManager.ets
import { Environment, envConfigs } from './EnvConfig';
import { emitter } from '@kit.EventKit';
export class EnvironmentManager {
private currentEnv: Environment = Environment.DEV;
private envChangeEmitter = new emitter.EventEmitter();
// 获取当前环境配置
getCurrentConfig() {
return envConfigs[this.currentEnv];
}
// 切换环境
switchEnvironment(env: Environment) {
if (this.currentEnv !== env) {
this.currentEnv = env;
this.envChangeEmitter.emit('envChanged', env);
}
}
// 订阅环境变化
onEnvironmentChange(callback: (env: Environment) => void) {
this.envChangeEmitter.on('envChanged', callback);
}
// 取消订阅
offEnvironmentChange(callback: (env: Environment) => void) {
this.envChangeEmitter.off('envChanged', callback);
}
}
export const envManager = new EnvironmentManager();
3. 应用配置
在AppScope/app.json5中配置环境变量:
{
"app": {
"bundleName": "com.example.app",
"versionCode": 1,
"versionName": "1.0.0",
"env": {
"default": "dev",
"environments": {
"dev": {
"apiBaseUrl": "https://dev.api.example.com"
},
"test": {
"apiBaseUrl": "https://test.api.example.com"
},
"prod": {
"apiBaseUrl": "https://api.example.com"
}
}
}
}
}
4. 使用示例
在页面中实现环境切换:
// Index.ets
import { envManager } from '../model/EnvironmentManager';
import { Environment } from '../model/EnvConfig';
@Entry
@Component
struct Index {
@State currentEnv: string = envManager.getCurrentConfig().apiBaseUrl;
aboutToAppear() {
// 订阅环境变化
envManager.onEnvironmentChange((env: Environment) => {
this.currentEnv = envManager.getCurrentConfig().apiBaseUrl;
});
}
build() {
Column() {
Text(`当前环境: ${this.currentEnv}`)
.fontSize(20)
.margin(10)
Button('切换到开发环境')
.onClick(() => envManager.switchEnvironment(Environment.DEV))
.margin(5)
Button('切换到测试环境')
.onClick(() => envManager.switchEnvironment(Environment.TEST))
.margin(5)
Button('切换到生产环境')
.onClick(() => envManager.switchEnvironment(Environment.PROD))
.margin(5)
}
}
}
5. 构建配置
在build-profile.json5中配置不同环境的构建参数:
{
"app": {
"signingConfigs": [],
"products": [
{
"name": "dev",
"signingConfig": "default",
"compileSdkVersion": 11,
"compatibleSdkVersion": 11,
"runtimeOS": "HarmonyOS"
},
{
"name": "prod",
"signingConfig": "release",
"compileSdkVersion": 11,
"compatibleSdkVersion": 11,
"runtimeOS": "HarmonyOS"
}
]
}
}
关键点说明:
- 环境隔离:通过枚举明确区分不同环境
- 配置集中管理:所有环境相关配置统一在EnvConfig中维护
- 事件驱动:使用EventEmitter实现环境变化的订阅通知
- 运行时切换:支持应用运行时的环境动态切换
- 类型安全:使用TypeScript确保配置访问的类型安全
这种实现方式支持开发期快速切换环境进行调试,也支持测试阶段验证不同环境的功能表现。

