OpenHarmony-测试同学安装测试包之全新姿势
2024-12-18 12:55:32
127次阅读
0个评论
一直以来,OpenHarmony中安装测试包非常不友好,它不像Android能下载安装,也不像ios能通过网页link安装。 构建平台打包成功后只能通过电脑辅助安装,不能直接安装。
- 测试自己下载Devco Studio,运行安装或者找研发帮忙安装APP
- 测试下载hdc,执行命令安装 不管是那种方式,都比较麻烦 有开发者把第二种方式的命令行做成了一个脚本 (android大哥 https://juejin.cn/post/7438456086308651045 北有花开 https://juejin.cn/post/7361943620930306100 ,不过依然需要使用电脑才能安装。
目前官网终于出了deeplink安装的方案
一、准备工作
- 准备一个未实名认证过的、归属地为中国大陆地区的华为开发者账号。为避免权限冲突,需要与原企业账号之间进行权限隔离,故不可使用已实名认证的账号。
- 用新注册的账号,完成企业内部应用分发资格申请。
- 为账号完成企业开发者(企业内部应用分发)实名认证,可参考实名认证申请指导文档准备相关材料。
二、申请组织内部发布证书
- 组织内部发布证书是由 AGC 颁发的、专门为企业内部应用配置签名信息的数字证书,可保障软件代码完整性和发布者身份真实性。证书格式为
.cer
,包含公钥、证书指纹等信息。 - 登录 AppGallery Connect,选择“证书、APP ID 和 Profile”。
- 在左侧导航栏选择“证书、APP ID 和 Profile > 证书”,进入“证书”页面,点击“新增证书”。
5. 在弹出的“新增证书”窗口填写要申请的证书信息,点击“提交”。
- 证书名称:不超过 100 个字符。
- 证书类型:选择“组织内部发布证书”。
- 选取证书请求文件(CSR):证书请求文件需要在 DevEco Studio 上申请,具体操作请参考生成密钥和证书请求文件。
6. 证书申请成功后,“证书管理”页面展示证书名称等信息。点击“下载”,将生成的证书保存至本地,供后续发布签名使用。
注意事项:
- 每个账号最多申请 1 个组织内部发布证书。
- 证书申请成功即为“生效”状态。若证书状态变为“失效”或“已吊销”,表示当前证书已不可用,且通过此证书申请的 Profile 也会全部失效或吊销。您需要重新申请证书与 Profile。
- 证书一旦废除将不可恢复,且通过此证书申请的 Profile 也会全部失效,请谨慎操作。
三、申请组织内部发布 Profile
- 组织内部发布 Profile 格式为
.p7b
,包含企业内部应用的包名、数字证书信息、应用允许申请的证书权限列表等内容。每个应用包中必须包含一个 Profile 文件。 - 登录 AppGallery Connect,选择“证书、APP ID 和 Profile”。
- 在左侧导航栏选择“证书、APP ID 和 Profile > Profile”,进入“Profile”页面,点击右上角“添加”。
- 在“添加 Profile”页面,填写 Profile 信息,完成后点击“添加”。
- 应用名称:选择需要申请 Profile 的应用名称。如尚未新建应用,请先前往“APP ID”菜单创建应用。
- 包名:选择应用名称后自动联想出。
- Profile 名称:不超过 100 个字符。
- 类型:选择“组织内部发布”。
- 选择证书:点击“选择”,选择申请的组织内部发布证书。
- 申请权限:若应用因特殊场景要求使用受限开放权限,请您务必在此处进行申请,否则您的应用将在审核时被驳回。
- API9 以下:仅支持申请
ohos.permission.READ_CONTACTS
与ohos.permission.WRITE_CONTACTS
权限。选择“受限权限(HarmonyOS API9 以下)”,根据需要勾选即可。 - API9 及以上:需要提供 APP ID、申请使用的受限开放权限、使用该权限的场景和功能信息,发送至
agconnect@huawei.com
。AGC 运营将审核相关材料,通过后将为您配置受限开放权限使用的名单,审核周期为 1 个工作日,请耐心等待。审核通过后,选择“受限 ACL 权限(HarmonyOS API9 及以上)”,在此配置项中勾选您申请的受限开放权限即可。选择权限时,请注意各权限支持的设备类型,确保软件包声明的设备类型范围不超出申请的权限支持的设备类型范围,否则将导致传包失败。
- API9 以下:仅支持申请
注意事项:
- 一个应用下申请的调试 Profile 和组织内部发布 Profile 总数不得超过 100 个。
- 请确保应用申请受限开放权限时提供的场景和功能信息准确。如果应用内使用的受限开放权限超出您申请的范围,或申请权限后使用的功能和场景超出可使用的范围,将影响您的应用上架。
- 若 Profile 状态变为“失效”或“已吊销”,表示当前 Profile 已不可用,您需要重新申请 Profile。
四、配置签名信息
- 使用制作的私钥(
.p12
)文件、在 AGC 申请的证书文件和 Profile(.p7b
)文件,在 DevEco Studio 配置工程的签名信息。 - 打开 DevEco Studio,在顶部菜单栏选择“File > Project Structure”,进入“Project Structure”界面。
- 导航选择“Project”,点击“Signing Configs”页签,取消“Automatically generate signature”勾选项,然后配置工程的签名信息,完成后点击“OK”。
- Store file:密钥库文件,选择生成密钥和证书请求文件时生成的
.p12
文件。 - Store password:密钥库密码,需要与生成密钥和证书请求文件时设置的密钥库密码保持一致。
- Key alias:密钥的别名信息,需要与生成密钥和证书请求文件设置的别名保持一致。
- Key password:密钥的密码,需要与生成密钥和证书请求文件时设置的密码保持一致。
- Sign alg:固定设置为“SHA256withECDSA”。
- Profile file:选择申请组织内部发布 Profile 时下载的
.p7b
文件。 - Certpath file:选择申请组织内部发布证书时下载的
.cer
文件。
- Store file:密钥库文件,选择生成密钥和证书请求文件时生成的
五、编译打包应用
- 分别将应用工程下的各个 module 进行编译打包。
- 编译 HAP 包:打开 DevEco Studio,在顶部菜单栏选择“Build > Build Hap(s)/APP(s) > Build Hap(s)”。等待编译构建。编译完成后,将在各模块的“build > default > outputs > default”目录下,获取到
XXX-signed.hap
文件。 - 编译 HSP 包(仅支持应用内 HSP):选中共享包模块,在 DevEco Studio 顶部菜单栏选择“Build > Make Module ${libraryName}”。等待编译构建。编译完成后,将在共享包模块的“build > default > outputs > default”目录下,获取到
*.hsp
文件。
- 编译 HAP 包:打开 DevEco Studio,在顶部菜单栏选择“Build > Build Hap(s)/APP(s) > Build Hap(s)”。等待编译构建。编译完成后,将在各模块的“build > default > outputs > default”目录下,获取到
六、上传应用包至服务器
- 将编译得到的各个 HAP/HSP 包上传至您的服务器或第三方云上,获取 HAP/HSP 包下载 URL,下载 URL 必须以“https”开头。
七、生成应用描述文件并上传至服务器
- 基于应用信息生成应用描述文件(如“manifest.json5”,文件名可自定义),代码如下:
{
"app": {
"bundleName": "com.example.demo.a",
"bundleType": "app",
"versionCode": 1000000,
"versionName": "1.0.0",
"label": "DemoA",
"deployDomain": "应用、图标以及描述文件部署域名",
"icons": {
"normal": "标准图标下载链接",
"large": "大图标下载链接"
},
"minAPIVersion": "4.1.0(11)",
"targetAPIVersion": "4.1.0(11)",
"modules": [
{
"name": "module1",
"type": "entry",
"deviceTypes": [
"tablet",
"phone"
],
"packageUrl": "hap 包下载链接",
"packageHash": "hap 包 sha256 值"
},
{
"name": "module2",
"type": "feature",
"deviceTypes": [
"tablet",
"phone"
],
"packageUrl": "hap 包下载链接",
"packageHash": "hap 包 sha256 值"
}
]
}
}
需传入的应用信息如下表所示。
属性 | 数据类型 | 必选(M)/可选(O) | 说明 |
---|---|---|---|
bundleName | 字符串 | M | 应用的 Bundle 名称。 |
bundleType | 字符串 | M | 应用的 Bundle 类型,用于区分 HarmonyOS 应用或元服务。当前仅支持配置为“app”,表示 HarmonyOS 应用。 |
versionCode | 数值 | M | 应用的版本号。 |
versionName | 字符串 | M | 应用版本号的文字描述。 |
label | 字符串 | M | 应用的名称,建议与实际应用名称一致,否则会出现下载与安装过程中应用名不一致的问题。 |
deployDomain | 字符串 | M | 应用、图标及描述文件的部署域名,需要与 icons、packageUrl 以及描述文件自身下载 URL 中的域名一致,否则会导致下载失败。 |
icons | 字符串 | M | 应用的图标,提供企业内部部署的图片下载地址,必须以“https”开头。 |
minAPIVersion | 字符串 | M | 应用运行所需 SDK 的 API 最小版本,用于判断是否与当前设备兼容。 |
targetAPIVersion | 字符串 | M | 应用运行所需的 API 目标版本,用于判断是否与当前设备兼容。 |
modules | 字符串 | M | 应用分包 module 信息列表,以数组形态组织,其中至少包括一个 entry module 信息。 |
name | 字符串 | M | module 的名称,该名称在整个应用须唯一。 |
type | 字符串 | M | 应用 module 的类型,取值范围: entry:应用的主模块 feature:应用的动态特性模块 shared:动态共享包模块(仅支持应用内共享包) |
deviceTypes | 字符串 | M | 当前 module 可以运行在哪类设备上,目前仅支持 phone(手机)和 tablet(平板)。 |
packageUrl | 字符串 | M | 当前 module 上传至服务器后生成的下载 URL,必须以“https”开头。 |
packageHash | 字符串 | M | 当前 module 的 SHA256 值。例如,可通过 certutil -hashfile 包路径 SHA256 命令获取。 |
- 将应用描述文件上传至您的服务器或第三方云上,获取该描述文件的下载 URL。
八、构造 DeepLink 拉起应用下载安装
- 获取应用描述文件的下载 URL 后,您便可使用该 URL 构造 DeepLink 来拉起应用下载安装。DeepLink 需满足如下条件:
- 仅支持页面点击行为触发拉起,不支持地址栏输入 DeepLink 拉起或 HTML 头文件自动拉起。
- 仅支持华为浏览器拉起,且从华为浏览器拉起的所有行为,均需判断是否有用户点击行为,确认用户点击才允许拉起。
- DeepLink 格式:
store://enterprise/manifest?url=https://xxx.xxx/xxx.json5
- Schema:
store://
- Host:
enterprise
- Path:
manifest
- 参数:描述文件上传至服务器后生成的下载 URL,必须以“https”开头。
- 示例:
url=https://xxx.xxx/xxx.json5
说明:如描述文件下载 URL 内包含特殊字符,还需进行特殊字符编码:declare function encodeURIComponent(uriComponent: string | number | boolean): string;
- 同时,服务器配置需满足如下条件,请特别关注:
- 您需要配置服务器支持分片下载能力。建议您在配置后进行验证:构造下载请求头包含 range 字段,返回码为 206,表示服务器支持分片下载;反之则不支持。
- 您需要配置服务器返回的响应头,使得应用描述文件和应用包可正确传输下载。
例如,用户在应用分发页面点击“下载”按钮后,华为浏览器将解析您构造的 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.')
});
}
如果应用已安装成功,但被阻止运行,请在“设置 > 系统 > 企业设备和应用管理 > 企业应用管理”中找到您的企业内部应用,点击“允许”。
说明:系统软件版本(3.0.0.22)的路径为 “设置 > 通用 > 企业设备和应用管理”。
参考
00
- 1回答
- 0粉丝
- 0关注
相关话题
- OpenHarmony:包体积优化
- OpenHarmony-组件小系列(已更新 1)
- OpenHarmony-应用案例集合(5-待更新)
- OpenHarmony: 如何查询应用包的信息
- OpenHarmony-应用框架案例集(0-待更新)
- OpenHarmony: 跨模块访问 HSP/HAR 包资源
- 元服务安装
- 鸿蒙如何查询应用包的名称、供应商、版本号、版本文本、安装时间、更新时间描述信息
- 鸿蒙元服务——安装教程
- 鸿蒙元服务:开启全新服务篇章(元启鸿途)
- 元服务虚拟机安装
- 【HarmonyOS学习】应用程序包
- OpenHarmony5.0应用开发 (三、应用程序包结构理解及Ability的跳转,与Android的对比)
- 05-Stage 模型应用程序包介绍
- 元服务之简单计算器