HarmonyOS鸿蒙Next中如何用代码安装hap包

HarmonyOS鸿蒙Next中如何用代码安装hap包 没有企业级证书,获取不了 ohos.permission.INSTALL_BUNDLE 的权限,有没有不用getBundleInstaller方法的安装方式,类似安装的intent一样询问客户安装的方式?ai说用want,试了一圈还是不行,不知道是用的不对,还是根本不能用want安装。

let want: Want = {
  action: 'ohos.intent.action.VIEW',
  uri: fileUri.getUriFromPath(filePath),
  type: 'application/vnd.huawei.hap'
};
console.log(`${OtaUpdatePlugin.TAG}: uri:${want.uri}`);
if (this.ability && this.ability.context) {
  this.ability.context.startAbilityForResult(want)
    .then(() => console.log(`${OtaUpdatePlugin.TAG}: Successfully launched installer`))
    .catch((err: BusinessError) => {
      console.error(`${OtaUpdatePlugin.TAG}: Failed to launch installer, code: ${err.code} , message: ${err.message}`);
    });
} else {
  console.error('Ability or context is not ready');
}

更多关于HarmonyOS鸿蒙Next中如何用代码安装hap包的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

可以将项目打包成hap包,然后使用第三方“蒲公英内测分发平台”进行分发测试

  • 编译HAP包 a. DevEco Studio菜单栏选择“Build > Build Hap(s)/APP(s) > Build Hap(s)”。 b. 等待编译构建。构建完成,在各模块的“build > default > outputs > default”目录下,获取到XXX-signed.hap文件。

【蒲公英官网】

第一步:上传已签名的.hap 文件

  • 前提:本地用华为 DevEco-Studio 等工具完成签名,生成 “XXXX-signed.hap” 文件(不可用未签名包)
  • 关键要求:签名所用的.p12 证书需与后续上传至蒲公英的.p12 完全一致

第二步:填写 App 信息(可选)

  • 可填内容:应用名称(平台自动解析版本号)、更新日志、应用截图、内测说明
  • 作用:提升分发页面专业性,便于测试人员识别

第三步:上传.p12 文件并设密码

  • 证书来源:华为 AppGallery Connect 的 “证书、APP ID 和 Profile” 页面下载
  • 用途:用于平台对 manifest.json5 文件签名(华为验证机制要求,确保设备识别可信来源)
  • 注意:需输入正确密码,平台会提示密码错误

第四步:获取分发链接与安装

  • 平台生成:下载链接 + 二维码,支持分享至微信 / 邮件 / 钉钉
  • 安装限制:仅支持纯血 HarmonyOS NEXT 系统设备,推荐用华为自带浏览器打开下载

四、常见问题答疑(Q&A)

  1. Q1:.hap 上传后安装失败?
    排查方向:①确认用 “xxx-signed.hap”(非未签名包);②.p12 证书与签名.hap 的证书一致;③.p12 密码正确;④Profile 类型为 “内部调试” 且包含测试设备 UDID;⑤根据华为错误码目录进一步查询
  2. Q2:分发链接支持多人下载吗?
    支持,且平台提供安装统计、设备识别功能
  3. Q3:平台会修改.hap 文件吗?
    不会,仅对 manifest.json5 文件进行签名处理
  4. Q4:支持 API 上传吗?
    支持,首个鸿蒙 App 上传后需额外调用 API 上传.p12 文件
  5. Q5:支持上传 hsp 文件吗?
    支持,需先上传 hap 文件,再在 “应用管理” 中找到 hsp 上传入口

在蒲公英平台分发HarmonyApp

更多关于HarmonyOS鸿蒙Next中如何用代码安装hap包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你这种直接用代码安装hap的方式是走不通的,如何这样可行的话,那有人就开始搞app商城随便分发下载app了!

你如果只是要安装测试包的话,可以通过采用构建Deeplink实现下载应用,非常简单哦!

  1. 将编译得到的各个HAP/HSP包上传至您的服务器或第三方云上,获取HAP/HSP包下载URL,下载URL必须以“https”开头。

  2. 基于应用信息生成应用描述文件(例如:manifest.json5,文件名可自定义)

  3. 将生成的应用描述文件上传至您的服务器或第三方云上,并获取该文件的下载URL。

  4. 将应用描述文件URL构建成Deeplink用于下载应用。Deeplink需要满足如下条件:

    • 仅支持页面点击行为触发拉起,不支持地址栏输入DeepLink拉起或HTML头文件自动拉起。
    • 仅支持华为浏览器拉起,且从华为浏览器拉起的所有行为,均需判断是否有用户点击行为,确认用户点击才允许拉起。
    • DeepLink格式:store://enterprise/manifest?url=https://xxx.xxx/xxx.json5
  5. 在分发页面实现下载功能,使华为浏览器解析Deeplink,触发应用的下载安装流程。

<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Button Open DeepLink Example</title>
    <script>
      function openDeepLink() {
        let url ='store://enterprise/manifest?url=https://xxx.xxx/xxx.json5'
        window.open(url, '_parent')
      }
    </script>
  </head>
  <body>
    <button onclick="openDeepLink()">下载</button>
  </body>
</html>

对于应用更新场景,可以使用openlink方式直接拉起下载安装。

private openDeepLink(deeplink: string): void {
    // deeplink格式具体见开发者文档
    let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    context.openLink(deeplink).then(() => {
        console.info('openlink success.')
    }).catch((error: BusinessError) => {
        console.error('openlink failed.')
    });
}

官方文档:https://developer.huawei.com/consumer/cn/doc/app/agc-help-internal-test-release-app-0000002260691994

在HarmonyOS Next中,可通过BundleInstaller接口安装hap包。首先获取bundleInstaller实例,然后使用install方法传入hap文件路径和安装参数。示例代码:

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

let hapPath = 'path/to/your/app.hap';
bundleInstaller.install(hapPath, { 
  userId: 100 
}, (err) => {
  if (err) {
    console.error('Install failed');
    return;
  }
  console.log('Install success');
});

需要配置ohos.permission.INSTALL_BUNDLE权限。

在HarmonyOS Next中,如果没有ohos.permission.INSTALL_BUNDLE权限,确实无法直接通过getBundleInstaller()方法安装hap包。你尝试使用Want的方式是正确的思路,但需要调整参数。

正确的实现方式应该是:

let want = {
  action: 'ohos.want.action.install',
  uri: 'file:///path/to/your/app.hap'
};

try {
  await context.startAbility(want);
  console.log('Successfully triggered installation');
} catch (err) {
  console.error(`Installation failed: ${err.code}, ${err.message}`);
}

关键点:

  1. 使用ohos.want.action.install作为action
  2. 确保hap文件路径正确且应用有文件访问权限
  3. 这种方式会调起系统安装界面,用户确认后完成安装

你之前使用的ohos.intent.action.VIEW主要用于查看文件,而不是安装操作。调整action后应该可以正常调起安装流程。

回到顶部