HarmonyOS 鸿蒙Next中怎样在元服务/APP中获取当前元服务的版本是测试版还是线上正式版?

HarmonyOS 鸿蒙Next中怎样在元服务/APP中获取当前元服务的版本是测试版还是线上正式版? 怎样在元服务/APP 中,获取当前元服务的版本是测试版,还是线上正式版?

5 回复

获取当前元服务/APP的版本是测试版(debug)还是线上正式版(release)的方法是通过查询应用的签名证书类型(appProvisionType属性)。该属性直接标识应用是调试版本还是发布版本。

实现步骤

  1. 导入bundleManager模块
  2. 获取当前应用的包信息:使用getBundleInfoForSelf方法,并指定GET_BUNDLE_INFO_WITH_APPLICATION以包含应用签名信息。
  3. 读取appProvisionType属性:从返回的BundleInfo对象中获取appProvisionType值,判断是否为"debug""release"

代码示例

import { bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 使用GET_BUNDLE_INFO_WITH_APPLICATION标志获取包含应用信息的包信息
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;

bundleManager.getBundleInfoForSelf(bundleFlags)
  .then((bundleInfo: bundleManager.BundleInfo) => {
    // 从BundleInfo中获取appProvisionType属性
    let provisionType = bundleInfo.appProvisionType;
    if (provisionType === 'debug') {
      console.log('当前应用是测试版(debug)');
    } else if (provisionType === 'release') {
      console.log('当前应用是线上正式版(release)');
    } else {
      console.log('未知版本类型');
    }
  })
  .catch((error: BusinessError) => {
    console.error(`获取应用信息失败: ${error.message}`);
  });

更多关于HarmonyOS 鸿蒙Next中怎样在元服务/APP中获取当前元服务的版本是测试版还是线上正式版?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


也可以通过 BuildProfile.DEBUG 参数获取包的编译类型 线上一定是release,测试版本是debug

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-get-build-profile-para-guide#section791213610540

问题分析:区分测试版环境还是正式版环境

通过bundleManager获取版本信息判断【正常开发流程的话:正式版往往比最新的开发测试版少一个版本号】:可以使用bundleManager.getBundleInfoForSelf方法来查询当前应用的版本信息。引入@kit.AbilityKit中的bundleManager,调用该方法并传入适当的标志位,如GET_BUNDLE_INFO_WITH_APPLICATIONGET_BUNDLE_INFO_DEFAULT,在返回的bundleInfo对象中获取应用的版本名(versionName)和版本号(versionCode),结合版本命名规则判断是否为测试版,如版本名中包含 “beta”“alpha” 等字样可能为测试版。示例代码如下:

import { bundleManager } from '@kit.AbilityKit';
bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
.then((bundleInfo) => {
    let versionName = bundleInfo.versionName; 
    let versionCode = bundleInfo.versionCode; 
})
.catch((error) => {
    // 处理错误
});

或者采用配置文件管理环境变量,通过读取不同配置文件区分测试与正式环境。若读取到测试环境相关配置,则为测试版,反之则为正式版。

在鸿蒙Next中,通过BundleInfo获取versionCodeversionName,与发布渠道预设值对比即可判断测试版或正式版。使用bundleManager.getBundleInfoForSelf()获取当前元服务信息,无需依赖Java或C语言。

在HarmonyOS Next中,可以通过BundleManager获取应用的版本信息,结合版本号或特定标识来判断当前是测试版还是正式版。以下是示例代码:

import bundleManager from '@ohos.bundle.bundleManager';

// 获取当前应用的版本信息
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
bundleManager.getBundleInfoForSelf(bundleFlags).then(bundleInfo => {
  let versionInfo = bundleInfo.versionInfo;
  let versionName = versionInfo.versionName; // 例如:1.0.0-beta 或 1.0.0-release
  let versionCode = versionInfo.versionCode;
  
  // 通过版本名判断
  if (versionName.includes('beta') || versionName.includes('test')) {
    console.log('当前为测试版');
  } else {
    console.log('当前为正式版');
  }
  
  // 或通过版本号判断(假设测试版版本号小于1000)
  if (versionCode < 1000) {
    console.log('当前为测试版');
  } else {
    console.log('当前为正式版');
  }
});

建议在开发过程中统一版本命名规范,例如测试版使用-beta后缀,正式版使用-release后缀,或通过版本号范围进行区分。

回到顶部