Skip to main content
版本:v3+

从 1.0 版本升级

介绍​

本文档是小程序 API 从 Zepp OS 1.0 至 Zepp OS 2.0 的升级指南。

提示

在阅读本文档前,建议先完成 2.0 API 介绍 的阅读。尤其是 API_LEVEL 兼容性部分!

信息

为了方便开发者进行快速迁移,Zepp OS 团队提供了提高迁移效率的命令行工具 @zeppos/zmt。

升级 2.0 API 的优势​

  • 可以用到 Zepp OS 最新的开放能力
  • Zepp OS 团队通过 API_LEVEL 对 API 兼容性进行保证,在后续版本升级中保证 API_LEVEL 的向下兼容性
  • 开发者无需关心固件版本号、Zepp OS 版本号,只需要对 API_LEVEL 做出兼容性适配,极大地简化了兼容性适配工作量

开始迁移​

影响范围​

首先明确升级 Zepp OS 2.0 JS API 所影响的的范围。

此次升级的小程序 API 仅适用于设备应用,即设置应用和伴生服务的开发模式与 1.0 版本相同,无需修改。

设备应用的开发语言是遵循 ES6 标准的 JavaScript,只有需要改动使用 Zepp OS 系统能力相关的代码。

举个例子,在 1.0 中,Zepp OS 系统能力通过全局变量如 hmUI、hmApp 等对外暴露,凡是使用了系统能力的地方,均需要进行改动。

迁移思路​

2.0 JS API 的能力是 1.0 JS API 的超集,所有的 1.0 JS API 的能力都可以在 2.0 JS API 中找到对应的方式,针对不同类型的 1.0 JS API,有不同的升级方式,下文将分为几类,分别用不同的方式进行处理。

情况 1:引用方式替换(仅适用于 hmUI 和 hmBle 模块)​

hmUI 和 hmBle 模块,目前只是对引用方式进行了变换,在文件头部替换引用方式即可。

举个例子:

v1.0page.js
Page({
build() {
const text = hmUI.createWidget(hmUI.widget.TEXT, {
x: 96,
y: 120,
w: 288,
h: 46,
color: 0xffffff,
text_size: 36,
align_h: hmUI.align.CENTER_H,
align_v: hmUI.align.CENTER_V,
text_style: hmUI.text_style.NONE,
text: 'HELLO ZEPPOS'
})
}
})

在头部加入一句 ESM 形式的引用即可。

v2.0page.js
import * as hmUI from '@zos/ui'

Page({
build() {
const text = hmUI.createWidget(hmUI.widget.TEXT, {
x: 96,
y: 120,
w: 288,
h: 46,
color: 0xffffff,
text_size: 36,
align_h: hmUI.align.CENTER_H,
align_v: hmUI.align.CENTER_V,
text_style: hmUI.text_style.NONE,
text: 'HELLO ZEPPOS'
})
}
})

情况 2:方法名称替换​

一部分方法功能保持不变,仅仅是方法名称的修改,添加相关方法引用语句之后,修改调用方法名和参数即可。

1.0 API2.0 API2.0 API 所在模块
hmApp.gotoHomehome@zos/router
hmApp.goBackback@zos/router
hmApp.exitexit@zos/router
hmApp.alarmCancelclearLaunchAppTimeout@zos/router
hmFS.open_assetopenAssetsSync@zos/fs
hmFS.openopenSync@zos/fs
hmFS.closecloseSync@zos/fs
hmFS.removermSync@zos/fs
hmFS.renamerenameSync@zos/fs
hmFS.mkdirmkdirSync@zos/fs
hmApp.setScreenKeepsetWakeUpRelaunch@zos/display
hmSetting.setScreenAutoBrightsetAutoBrightness@zos/display
hmSetting.getScreenAutoBrightgetAutoBrightness@zos/display
hmSetting.setBrightnesssetBrightness@zos/display
hmSetting.getBrightnessgetBrightness@zos/display
hmSetting.setScreenOffsetScreenOff@zos/display
hmSetting.setBrightScreenCancelresetPageBrightTime@zos/display
hmSetting.getUserDatagetProfile@zos/user
hmSetting.getDiskInfogetDiskInfo@zos/device
hmSetting.getDeviceInfogetDeviceInfo@zos/device
hmSetting.getLanguagegetLanguage@zos/settings
hmSetting.getDateFormatgetDateFormat@zos/settings
hmSetting.getMileageUnitgetDistanceUnit@zos/settings
hmSetting.getWeightUnitgetWeightUnit@zos/settings
hmSetting.getWeightTargetgetWeightTarget@zos/settings
hmSetting.getSleepTargetgetSleepTarget@zos/settings
hmApp.registerGestureEventonGesture@zos/interaction
hmApp.unregisterGestureEventoffGesture@zos/interaction
hmApp.registerKeyEventonKey@zos/interaction
hmApp.unregisterKeyEventoffKey@zos/interaction
hmApp.registerSpinEventonDigitalCrown@zos/interaction
hmApp.unregisterSpinEventoffDigitalCrown@zos/interaction
hmApp.getPackageInfogetPackageInfo@zos/app
hmSetting.getScreenTypegetScene@zos/app
hmApp.setLayerYscrollTo@zos/page
hmApp.getLayerYgetScrollTop@zos/page
hmUI.getScrollCurrentPagegetSwiperIndex@zos/page

举个例子:

v1.0page.js
hmApp.setLayerY(100)
const result = hmSetting.getUserData()
hmApp.gotoHome()

对照上文表格,以及 2.0 API 文档,很快就可以完成替换。

v2.0page.js
import { scrollTo } from '@zos/page'
import { home } from '@zos/router'
import { getProfile } from '@zos/user'

scrollTo({
y: 100
})
const result = getProfile()
home()

情况 3:API 能力升级,替换时需要注意参数​

一些方法的能力进行增强,加入了新的参数,根据 2.0 API 的功能进行等价调用即可。

1.0 API2.0 更强能力 API2.0 API 所在模块
hmApp.setBrightScreensetPageBrightTime@zos/display
hmApp.statstatSync@zos/fs
hmApp.open_assetopenAssetsSync@zos/fs
hmApp.openopenSync@zos/fs
hmApp.closecloseSync@zos/fs
hmApp.readreadSync@zos/fs
hmApp.writewriteSync@zos/fs
hmUI.showToastshowToast@zos/interaction
hmUI.createDialogcreateModal@zos/interaction
hmUI.scrollToPageswipeToIndex@zos/page
hmUI.setScrollViewsetScrollMode@zos/page
hmApp.startApplaunchApp@zos/router
hmApp.gotoPagepush@zos/router
hmApp.reloadPagereplace@zos/router
hmApp.gotoHomehome@zos/router
hmApp.alarmNewsetLaunchAppTimeout@zos/router

情况 4:模块常量​

类似情况 2 中的方法名称变换,部分常量也需要进行相似替换。

1.0 常量2.0 常量2.0 常量所在模块
hmSetting.screen_type.APPSCENE_APP@zos/app
hmSetting.screen_type.WATCHFACESCENE_WATCHFACE@zos/app
hmSetting.screen_type.SETTINGSSCENE_SETTINGS@zos/app
hmSetting.screen_type.AODSCENE_AOD@zos/app
hmFS.O_RDONLYO_RDONLY@zos/fs
hmFS.O_WRONLYO_WRONLY@zos/fs
hmFS.O_RDWRO_RDWR@zos/fs
hmFS.O_APPENDO_APPEND@zos/fs
hmFS.O_CREATO_CREAT@zos/fs
hmFS.O_EXCLO_EXCL@zos/fs
hmFS.O_TRUNCO_TRUNC@zos/fs
hmApp.gesture.UPGESTURE_UP@zos/interaction
hmApp.gesture.DOWNGESTURE_DOWN@zos/interaction
hmApp.gesture.LEFTGESTURE_LEFT@zos/interaction
hmApp.gesture.RIGHTGESTURE_RIGHT@zos/interaction
hmApp.key.BACKKEY_BACK@zos/interaction
hmApp.key.SELECTKEY_SELECT@zos/interaction
hmApp.key.HOMEKEY_HOME@zos/interaction
hmApp.key.UPKEY_UP@zos/interaction
hmApp.key.DOWNKEY_DOWN@zos/interaction
hmApp.key.SHORTCUTKEY_SHORTCUT@zos/interaction
hmApp.action.CLICKKEY_EVENT_CLICK@zos/interaction
hmApp.action.LONG_PRESSKEY_EVENT_LONG_PRESS@zos/interaction
hmApp.action.DOUBLE_CLICKKEY_EVENT_DOUBLE_CLICK@zos/interaction
hmApp.action.RELEASEKEY_EVENT_RELEASE@zos/interaction
hmApp.action.PRESSKEY_EVENT_PRESS@zos/interaction

举个例子:

v1.0page.js
const fd = hmFS.open('test_file.txt', hmFS.O_RDWR | hmFS.O_CREAT)

对照上文表格,以及 2.0 API 文档,快速完成替换。

v2.0page.js
import { openSync, O_RDWR, O_CREAT } from '@zos/fs'

const fd = openSync({
path: 'test.txt',
flag: O_RDWR | O_CREAT
})

情况 5:传感器模块​

ZeppOS 2.0 的传感器模块全部是 Class 类型,调用方式发生了较大变化,去除了属性访问,全部改为方法调用,此处参考传感器的文档即可,简单举个例子:

v1.0page.js
const battery = hmSensor.createSensor(hmSensor.id.BATTERY)

console.log(battery.current)
v2.0page.js
import { Battery } from '@zos/sensor'

const battery = new Battery()
console.log(battery.getCurrent())

情况 6: i18n 模块​

直接参考替换示例:

v1.0page.js
import { gettext } from 'i18n'

gettext('i18n_key')
v2.0page.js
import { getText } from '@zos/i18n'

getText('i18n_key')

情况 7:从 DeviceRuntimeCore 上调用的日志方法​

直接参考替换示例:

v1.0page.js
const logger = DeviceRuntimeCore.HmLogger.getLogger('app.js')

logger.log('app.js onCreate')
v2.0page.js
import { log } from '@zos/utils'

const logger = log.getLogger('app.js')
logger.log('app.js onCreate')

情况 8: 全局使用的 px 和 assets 工具函数​

在 Zepp OS 2.0 中这两个方法需要从 utils 模块引入。

v1.0page.js
px(480)

const assetsPathFunc = assets('img')
v2.0page.js
import { px, assets } from '@zos/utils'

px(480)

const assetsPathFunc = assets('img')

情况 9:1.0 定时器 timer 模块废除,需要替换为 JS 定时器 API​

参考 setTimeout。

情况 10:使用了 hmFS.seek​

为了方便开发者文件系统操作,2.0 API 极大增强了文件系统相关 API 易用性。

建议使用新 API 对文件逻辑进行重写。

或者直接使用 LocalStorage 的能力,来实现持久化键值对存储,支持标准 JSON 对象。

情况 11:使用了 message.js 蓝牙通信能力​

在 Zepp OS 1.0 的示例代码中,我们通过 /shared/message.js 提供了蓝牙通信的能力。

在 Zepp OS 2.0 中,设备应用需要将 /shared/message.js 进行更新,伴生服务仍使用 /shared/message-side.js。

具体请参考 Sample - ToDoList。

迁移工具​

为了方便开发者进行迁移工作,提供了一个命令行迁移工具 @zeppos/zmt。

可以自动地完成以上大部分替换工作,部分需要开发者手动处理的逻辑会在命令行给出提示。

npm i @zeppos/zmt -g

or

yarn global add @zeppos/zmt

执行迁移工具脚本

zmt -p /path/to/1.0 -o /path/to/2.0

更多信息请参考 npm - @zeppos/zmt。