暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

秒懂!原来鸿蒙手表可以这么玩

51CTO技术栈 2020-12-12
8532

本人于 9 月中旬,开始接触鸿蒙。那时候还只是抱着尝新的心态,跟着官方文档,写出了 TV 版的 hello world 和 Lite Wearable 的 hello world,现在回想起来,还是有点激动。

到了 9 月下旬,公司收到了华为寄过来的搭载鸿蒙系统的智能手表,因为某种原因,智能表开发的任务落到了我头上。

我是前端开发,说实话,当时接到这个任务时候,其实没多少底,毕竟不懂 APP 开发的流程,虽说鸿蒙支持 JS 开发,但其实心里也清楚,里面应该还是有很多坑要踩的,事实证明,坑是真的多。哈哈哈。

今天为什么有时间写这篇文章呢?因为我的智能手表应用已经开发、联调、测试完毕了,马上要上架啦。

话不多说,让我们进入正题。

01

配置

①准备工作(下载、安装、环境配置、创建项目等)

这个过于简单,就毋庸赘言了,请参考官方文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415
复制

生成的目录结构,就是这个样子。对于安卓开发来讲,应该是很熟悉的,但对于前端来讲,就很懵逼啊。

什么 gradle 文件,这是啥啊,咦,为什么还有 Java,我不是选择的 JS 模板呢?很是疑惑。先不管了,硬着头皮干。

②config.json 权限列表配置(fetch、network 等)

鸿蒙应用里,image 标签想要使用 https 的外链资源,必须要配置权限,同理,fetch 接口请求也是如此。

我自己在开发过程中,是配置了网络请求的权限,以及网络状态的权限。
"reqPermissions": [  {    "name""ohos.permission.GET_NETWORK_INFO"  },  {    "name""ohos.permission.GET_WIFI_INFO"  },  {    "name""ohos.permission.INTERNET",  },],
复制

③离线签名与签名配置  (用于真机调试)

如果用不到真机调试,可忽略这一步。请参考文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/create_csr-0000001053702411#ZH-CN_TOPIC_0000001057415967__section982020120137
复制

编辑器的版本不一样,使用的密钥文件不一样。有的是 .p12,有的是 .jks。

如果你生成的是 jks,那么你可能需要转换 p12,笔者就转过,可自行百度。

申请开发者证书和调试 Profile,request.json 如下:
{     "developerRequest": {         "Applicant""XXXX",         "ApplicationName""XXXX",         "CN""XXXX",         "validYear""1"     },     "provisionRequest": {         "debug-info": {             "device-ids": [                           ""  // 调试真机的UDID            ]         },         "permissions": {             "restricted-permissions": [                 "harmonyos.permission.ANSWER_PHONE_CALLS"             ]         },         "bundle-name""你的包名",         "developer-id""你的开发者ID"     } }
复制
然后将你生成 csr、p12 还有这个 request.json 一并发给华为的人,然后他们会给你 cer 和 p7b 的文件,你直接导入就行了。

至此,真机调试的准备工作我们就已经完成了。

真机调试打出来的包是 hap 包,如果要上架的话,必须是 .app 的文件,所以我们还要在项目配置里,导入这些证书等,同上一步操作。

④集成 Wear Engine SDK(手表和 APP 通讯)

APP 和手表都要集成对应的 SDK,才能通讯。

添加编译依赖:

1.联系华为接口人获取 SDK。

2.将 SDK 解压后,把 SDK 中的 har 包放在项目 \entry\ libs 目录下。

3.打开应用级的 build.gradle 文件。
4.在“dependencies ”中添加如下编译依赖,,然后同步。

⑤生成穿戴设备侧签名证书指纹、设备检测

手表侧要配置 APP 的指纹和包名,APP 侧要配置手表侧的指纹和包名。请参考文档:
https://developer.huawei.com/consumer/cn/doc/development/connectivity-Guides/signature-0000001053969657
复制
手表侧配置 APP 的包名和指纹代码如下:

⑥编译构建生成 HAP 或者生成 APP

请参考文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/build_hap-0000001053342418
复制

02

开发

开发倒没有什么好说的,就是正常的前端那一套,布局、样式、逻辑。需要注意的是,设备的分辨率是 454*454,圆形屏幕,需要留出安全距离。

如果手表需要和手机 APP 进行交互的话,JS 的能力比较弱,需要依赖 Java 来做中转。

Java 代码不是我写的,直接照抄的官方文档,然后让安卓客户端改造了一下。

我做的这个项目就是这么做的,目录如下:

还有一点要注意的,Java 不能主动向 JS 发送消息,需要 JS 主动才行。

手机和手表信息同步时候,需要用户信息,我们的做法是:手机端登陆后,会向我的手表发一个用户身份信息,手表侧的 Java 代码能接收到,但是 JS 收不到,这个时候我的做法是在手表侧的 JS 做一个轮询,向 Java 去索取登录信息。

一般的做法就是 setInterval,但是我发觉这个 setInterval 在鸿蒙里并不生效,我很绝望,最后我采用了递归。

就是手表在 onShow 生命周期里,不停的调用 PA 能力(可参考文档),如果拿到了用户信息,就缓存到本地,停止调用,然后发送 fetch 请求,拿到服务端的数据。这样一个数据同步就完成了。

说到缓存,也有一个小坑,这个 value 值,一定要是字符串,本来我的 res 就是字符串,但是直接写,会报错,必须用 JSON.stringify() 转一下。

调用 PA 能力的代码如下:

Java 先注册一个 CalcInternalAbility,供 JS 调用:

JS 调用该方法,如下,value 就是 Java 的返回值:

03

调试

这里主要讲 JS 的调试,JS 打印调试信息,一般都是 console.log(),但是这个编辑器里推荐使用 console.info()。

一旦程序开始运行时候,控制台里会不停的打印一些信息,完全看不懂,我们想要看看我们的 JS 代码执行到那个环节了,也不能很清晰的找到,推荐我自己用的方法。

这样我们就可以在控制台清楚的看到自己的打印信息,也就知道代码执行到哪一步了。

04

结尾

整个项目开发过程中,坑还是挺多的,但是没办法,毕竟刚出来。

但只要是在慢慢变好,那就未来可期,虽然华为诸多磨难,但鸿蒙仍需背负"小小"的使命感,经历过更多磕碰,鸿蒙才会更加厚重,希望喜欢鸿蒙的人能继续喜欢鸿蒙,不喜欢鸿蒙的人能慢慢尝试接受鸿蒙。

送 福 利 啦

关注HarmonyOS技术社区,回复【鸿蒙】价值399元的鸿蒙开发板套件(数量不多,先到先得),还可以免费下载鸿蒙入门资料

👇扫码立刻关注👇

专注开源技术,共建鸿蒙生态

点“阅读原文”了解更多

文章转载自51CTO技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论