js-apis-update.md 15.2 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12
# 升级

升级范围:升级整个OpenHarmony系统,包括内置的资源、预置应用;第三方的应用不在升级的范围。

升级依赖:升级分为SD卡升级和在线升级两种。

- SD卡升级依赖升级包和SD卡安装。
- 在线升级依赖手机厂商部署的用于管理升级包的服务器。服务器由手机厂商部署,IP由调用者传入,请求的request接口是固定的,由手机厂商开发。

## 导入模块

```js
Z
zengyawen 已提交
13
import update from '@ohos.update'
Z
zengyawen 已提交
14 15 16 17 18 19
```

## 权限列表



Z
zengyawen 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
## 获取升级对象Updater

### update.getUpdater

getUpdater(upgradeFile: string, updateType?: UpdateTypes): Updater

获取本地升级Updater。

**参数:**

| 参数名      | 类型                        | 必填 | 说明     |
| ----------- | --------------------------- | ---- | -------- |
| upgradeFile | string                      | 是   | 升级文件 |
| updateType  | [UpdateTypes](#updatetypes) | 是   | 升级类型 |

**返回值:**

| 类型                | 说明     |
| ------------------- | -------- |
| [Updater](#updater) | 升级对象 |

**示例:**

```
try {
  let updater = update.getUpdater('/data/updater/updater.zip', 'OTA');
} catch(error) {
  console.error(" Fail to get updater error: " + error);
}
```

### update.getUpdaterForOther

getUpdaterForOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater

获取升级对象给待升级设备。

**参数:**

| 参数名      | 类型                        | 必填 | 说明       |
| ----------- | --------------------------- | ---- | ---------- |
| upgradeFile | string                      | 是   | 升级文件   |
| device      | string                      | 是   | 待升级设备 |
| updateType  | [UpdateTypes](#updatetypes) | 是   | 升级类型   |

**返回值:**

| 类型                | 说明     |
| ------------------- | -------- |
| [Updater](#updater) | 升级对象 |

**示例:**

```
try {
  let updater = update.getUpdaterForOther('/data/updater/updater.zip', '1234567890', 'OTA');
} catch(error) {
  console.error(" Fail to get updater error: " + error);
}
```

### update.getUpdaterFromOther

getUpdaterFromOther(upgradeFile: string, device: string, updateType?: UpdateTypes): Updater

获取其它设备为本设备升级的Updater。

**参数:**

| 参数名      | 类型                        | 必填 | 说明       |
| ----------- | --------------------------- | ---- | ---------- |
| upgradeFile | string                      | 是   | 升级文件   |
| device      | string                      | 是   | 待升级设备 |
| updateType  | [UpdateTypes](#updatetypes) | 是   | 升级类型   |

**返回值:**

| 类型                | 说明     |
| ------------------- | -------- |
| [Updater](#updater) | 升级对象 |

**示例:**

```
try {
  let updater = update.getUpdaterFromOther('/data/updater/updater.zip', '1234567890', 'OTA');
} catch(error) {
  console.error(" Fail to get updater error: " + error);
}
```

Z
zengyawen 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
## Updater

###  getNewVersionInfo

getNewVersionInfo(callback: AsyncCallback\<NewVersionInfo>): void

获取新版本信息,使用callback方式作为异步方法。

**参数:**

| 参数名   | 类型                                             | 必填 | 说明               |
| -------- | ------------------------------------------------ | ---- | ------------------ |
| callback | AsyncCallback<[NewVersionInfo](#newversioninfo)> | 否   | 回调返回新版本信息 |

**示例:**

```
Z
zengyawen 已提交
128
update.getNewVersionInfo(info => {
Z
zengyawen 已提交
129 130 131 132
  console.log("getNewVersionInfo success  " + info.status);
  console.log(`info versionName = ` + info.result[0].versionName);
  console.log(`info versionCode = ` + info.result[0].versionCode);
  console.log(`info verifyInfo = ` + info.result[0].verifyInfo);
Z
zengyawen 已提交
133
});
Z
zengyawen 已提交
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
```

### getNewVersionInfo

getNewVersionInfo(): Promise\<NewVersionInfo>

获取新版本信息,使用promise方式作为异步方法。

**返回值:**

| 类型                                        | 说明                      |
| ------------------------------------------- | ------------------------- |
| Promise\<[NewVersionInfo](#newversioninfo)> | Promise,用于异步获取结果 |

**示例:**

```
Z
zengyawen 已提交
151
updater.getNewVersionInfo().then(value => {
Z
zengyawen 已提交
152 153 154
  console.log(`info versionName = ` + value.result[0].versionName);
  console.log(`info versionCode = ` + value.result[0].versionCode);
  console.log(`info verifyInfo = ` + value.result[0].verifyInfo);
Z
zengyawen 已提交
155
}).catch(err => {
Z
zengyawen 已提交
156
  console.log("getNewVersionInfo promise error: " + err.code);
Z
zengyawen 已提交
157
});
Z
zengyawen 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
```

### checkNewVersion

checkNewVersion(callback: AsyncCallback\<NewVersionInfo>): void

检查新版本,使用callback方式作为异步方法。

**参数:**

| 参数名   | 类型                                              | 必填 | 说明               |
| -------- | ------------------------------------------------- | ---- | ------------------ |
| callback | AsyncCallback\<[NewVersionInfo](#newversioninfo)> | 否   | 回调返回新版本信息 |

**示例:**

```
Z
zengyawen 已提交
175
update.checkNewVersion(info => {
Z
zengyawen 已提交
176 177 178 179
  console.log("checkNewVersion success  " + info.status);
  console.log(`info versionName = ` + info.result[0].versionName);
  console.log(`info versionCode = ` + info.result[0].versionCode);
  console.log(`info verifyInfo = ` + info.result[0].verifyInfo);
Z
zengyawen 已提交
180
});
Z
zengyawen 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
```

### checkNewVersion

checkNewVersion(): Promise\<NewVersionInfo>

检查新版本,使用promise方式作为异步方法。

**返回值:**

| 类型                                        | 说明                      |
| ------------------------------------------- | ------------------------- |
| Promise\<[NewVersionInfo](#newversioninfo)> | Promise函数返回新版本信息 |

**示例:**

```
Z
zengyawen 已提交
198
update.checkNewVersion().then(value => {
Z
zengyawen 已提交
199 200 201
  console.log(`info versionName = ` + value.result[0].versionName);
  console.log(`info versionCode = ` + value.result[0].versionCode);
  console.log(`info verifyInfo = ` + value.result[0].verifyInfo);
Z
zengyawen 已提交
202
}).catch(err => {
Z
zengyawen 已提交
203
  console.log("checkNewVersion promise error: " + err.code);
Z
zengyawen 已提交
204
});
Z
zengyawen 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
```

### verifyUpdatePackage

verifyUpdatePackage(upgradeFile: string, certsFile: string): void

升级前检查升级包是否有效。

**参数:**

| 参数名      | 类型   | 必填 | 说明               |
| ----------- | ------ | ---- | ------------------ |
| upgradeFile | string | 是   | 待校验的升级包路径 |
| certsFile   | string | 是   | 证书路径           |

**示例:**

```
Z
zengyawen 已提交
223 224
update.on("verifyProgress", callback => {
  console.info('on verifyProgress ' + callback.percent);
Z
zengyawen 已提交
225
});
Z
zengyawen 已提交
226
update.verifyUpdatePackage("XXX", "XXX");
Z
zengyawen 已提交
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
```

### rebootAndCleanUserData

rebootAndCleanUserData(): Promise\<number>

重启设备并清除用户分区数据。

**返回值:**

| 类型             | 说明                            |
| ---------------- | ------------------------------- |
| Promise\<number> | Promise示例,用于异步获取结果。 |

**示例:**

```
Z
zengyawen 已提交
244 245 246 247
update.rebootAndCleanUserData().then(result => {
  console.log("rebootAndCleanUserData " + result);
}).catch(err => {
  console.info("rebootAndCleanUserData promise error: " + err.code);
Z
zengyawen 已提交
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
});
```

### rebootAndCleanUserData

rebootAndCleanUserData(callback: AsyncCallback\<number>): void

重启设备并清除用户分区数据。

**参数:**

| 参数名   | 类型     | 必填 | 说明                   |
| -------- | -------- | ---- | ---------------------- |
| callback | Function | 是   | AsyncCallback\<number> |

**示例:**

```
Z
zengyawen 已提交
266 267
update.rebootAndCleanUserData(result => {
  console.log("rebootAndCleanUserData ", result)
Z
zengyawen 已提交
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
});
```

### applyNewVersion

applyNewVersion(): Promise\<number>

重启设备后安装升级包。

**返回值:**

| 类型             | 说明                            |
| ---------------- | ------------------------------- |
| Promise\<number> | Promise示例,用于异步获取结果。 |

**示例:**

```
Z
zengyawen 已提交
286 287 288
update.applyNewVersion().then(result => {
    console.log("appVewVersion ", result)
}).catch(err => {
Z
zengyawen 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
    console.info("applyNewVersion promise error: " + err.code);
});
```

### applyNewVersion

applyNewVersion(callback: AsyncCallback\<number>): void

重启设备后安装升级包。

**参数:**

| 参数名   | 类型     | 必填 | 说明                   |
| -------- | -------- | ---- | ---------------------- |
| callback | Function | 是   | AsyncCallback\<number> |

**示例:**

```
Z
zengyawen 已提交
308 309
update.applyNewVersion(result => {
  console.log("applyNewVersion ", result)
Z
zengyawen 已提交
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
});
```

### download

download(): void

下载新版本,并监听下载进程。

**示例:**

```
updater.on("downloadProgress", progress => {
  console.log("downloadProgress on" + progress);
  console.log(`downloadProgress status: ` + progress.status);
  console.log(`downloadProgress percent: ` + progress.percent);
Z
zengyawen 已提交
326
});
Z
zengyawen 已提交
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
updater.download();
```

### upgrade

updater.upgrade():void

启动升级。

**示例:**

```
updater.on("upgradeProgress", progress => {
  console.log("upgradeProgress on" + progress);
  console.log(`upgradeProgress status: ` + progress.status);
  console.log(`upgradeProgress percent: ` + progress.percent);
Z
zengyawen 已提交
343
});
Z
zengyawen 已提交
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364
updater.upgrade();
```

### setUpdatePolicy

setUpdatePolicy(policy: UpdatePolicy, callback: AsyncCallback\<number>): void

设置升级策略,使用callback方式作为异步方法。

**参数:**

| 参数名   | 类型                          | 必填 | 说明         |
| -------- | ----------------------------- | ---- | ------------ |
| policy   | [UpdatePolicy](#updatepolicy) | 是   | 设置升级策略 |
| callback | AsyncCallback\<number>        | 是   | 回调返回结果 |

**示例:**

```
// 设置策略
let policy = {
Z
zengyawen 已提交
365 366 367 368 369
  autoDownload: false,
  autoDownloadNet: true,
  mode: 2,
  autoUpgradeInterval: [ 2, 3 ],
  autoUpgradeCondition: 2
Z
zengyawen 已提交
370
}
Z
zengyawen 已提交
371 372 373
update.setUpdatePolicy(policy, result => {
  console.log("setUpdatePolicy ", result)
});
Z
zengyawen 已提交
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
```

### setUpdatePolicy

setUpdatePolicy(policy: UpdatePolicy): Promise\<number>

设置升级策略,使用promise方式作为异步方法。

**参数:**

| 参数名 | 类型                          | 必填 | 说明         |
| ------ | ----------------------------- | ---- | ------------ |
| policy | [UpdatePolicy](#updatepolicy) | 是   | 设置升级策略 |

**返回值:**

| 类型             | 说明                    |
| ---------------- | ----------------------- |
| Promise\<number> | Promise函数返回设置结果 |

**示例:**

```
let policy = {
Z
zengyawen 已提交
398 399 400 401 402
  autoDownload: false,
  autoDownloadNet: true,
  mode: 2,
  autoUpgradeInterval: [ 2, 3 ],
  autoUpgradeCondition: 2
Z
zengyawen 已提交
403
}
Z
zengyawen 已提交
404 405 406 407 408
update.setUpdatePolicy(policy).then(result => 
  console.log("setUpdatePolicy ", result)
).catch(err => {
  console.log("setUpdatePolicy promise error: " + err.code);
});
Z
zengyawen 已提交
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
```

### getUpdatePolicy

getUpdatePolicy(callback: AsyncCallback\<UpdatePolicy>): void

获取升级策略信息,使用callback方式作为异步方法。

**参数:**

| 参数名   | 类型                                          | 必填 | 说明                 |
| -------- | --------------------------------------------- | ---- | -------------------- |
| callback | AsyncCallback\<[UpdatePolicy](#updatepolicy)> | 否   | 回调返回升级策略信息 |

**示例:**

```
Z
zengyawen 已提交
426
update.getUpdatePolicy(policy => {
Z
zengyawen 已提交
427 428 429 430
  console.log("getUpdatePolicy success");
  console.log(`policy autoDownload = ` + policy.autoDownload);
  console.log(`policy autoDownloadNet = ` + policy.autoDownloadNet);
  console.log(`policy mode = ` + policy.mode);
Z
zengyawen 已提交
431
});
Z
zengyawen 已提交
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
```

### getUpdatePolicy

getUpdatePolicy(): Promise\<UpdatePolicy>

获取升级策略,通过promise方式作为异步方法。

**返回值:**

| 类型                                    | 说明                        |
| --------------------------------------- | --------------------------- |
| Promise\<[UpdatePolicy](#updatepolicy)> | Promise函数返回升级策略信息 |

**示例:**

```
Z
zengyawen 已提交
449
update.getUpdatePolicy().then(value => {
Z
zengyawen 已提交
450 451 452
  console.log(`info autoDownload = ` + value.autoDownload);
  console.log(`info autoDownloadNet = ` + value.autoDownloadNet);
  console.log(`info mode = ` + value.mode);
Z
zengyawen 已提交
453
}).catch(err => {
Z
zengyawen 已提交
454
  console.log("getUpdatePolicy promise error: " + err.code);
Z
zengyawen 已提交
455
});
Z
zengyawen 已提交
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
```

## UpdateTypes

升级类型。

| 参数名 | 说明     |
| ------ | -------- |
| OTA    | OTA升级  |
| patch  | 补丁升级 |

## PackageTypes

升级包类型。

| 参数名               | 默认值 | 说明           |
| -------------------- | ------ | -------------- |
| PACKAGE_TYPE_NORMAL  | 1      | 通用升级包     |
| PACKAGE_TYPE_BASE    | 2      | 基础升级包     |
| PACKAGE_TYPE_CUST    | 3      | 定制升级包     |
| PACKAGE_TYPE_PRELOAD | 4      | 预装升级包     |
| PACKAGE_TYPE_COTA    | 5      | 参数配置升级包 |
| PACKAGE_TYPE_VERSION | 6      | 版本升级包     |
| PACKAGE_TYPE_PATCH   | 7      | 补丁包         |

## InstallMode

安装模式。

| 参数名              | 默认值 | 说明     |
| ------------------- | ------ | -------- |
| INSTALL_MODE_NORMAL | 0      | 正常升级 |
| INSTALL_MODE_NIGHT  | 1      | 夜间升级 |
| INSTALL_MODE_AUTO   | 2      | 自动升级 |

## NewVersionStatus

新版本检测状态。

| 参数名              | 默认值 | 说明             |
| ------------------- | ------ | ---------------- |
| VERSION_STATUS_ERR  | -1     | 检测版本时出错   |
| VERSION_STATUS_NEW  | 0      | 检测到新版本     |
| VERSION_STATUS_NONE | 1      | 没有检测到新版本 |
| VERSION_STATUS_BUSY | 2      | 检测版本时忙     |

## UpdatePolicy

升级策略。

| 名称                | 参数类型                    | 必填 | 说明           |
| ------------------- | --------------------------- | ---- | -------------- |
| autoDownload        | bool                        | 是   | 自动升级开关   |
| installMode         | [InstallMode](#installmode) | 是   | 安装模式       |
| autoUpgradeInterval | Array\<number>              | 是   | 自动升级时间段 |

## NewVersionInfo

新版本信息。

| 名称            | 参数类型                                    | 必填 | 说明     |
| --------------- | ------------------------------------------- | ---- | -------- |
| status          | [NewVersionStatus](#newversionstatus)       | 是   | 升级状态 |
| errMsg          | string                                      | 是   | 错误信息 |
| checkResults    | Array<[CheckResult](#checkresult)>          | 是   | 检测结果 |
| descriptionInfo | Array\<[DescriptionInfo](#descriptioninfo)> | 是   | 描述信息 |

## CheckResult

检测结果。

| 名称          | 参数类型                      | 必填 | 说明         |
| ------------- | ----------------------------- | ---- | ------------ |
| versionName   | string                        | 是   | 版本名称     |
| versionCode   | number                        | 是   | 版本编码     |
| size          | number                        | 是   | 版本大小     |
| verifyInfo    | string                        | 是   | 版本校验信息 |
| packageType   | [PackageTypes](#packagetypes) | 是   | 版本类型     |
| descriptionId | string                        | 是   | 版本描述信息 |

## DescriptionInfo

版本描述信息。

| 名称          | 参数类型 | 必填 | 说明              |
| ------------- | -------- | ---- | ----------------- |
| descriptionId | string   | 是   | 版本versionId信息 |
| content       | string   | 是   | 版本changelog信息 |