作者|Gordon,携程资深移动开发工程师,关注鸿蒙开发。背景作为全球领先的一站式旅游服务平台,携程始终坚持以技术创新为发展核心。自鸿蒙发布以来,我们投入研发力量进行研发,成功落地了携程机票项目和服务卡项目。下面我将在鸿蒙项目中的相关经验进行整理分享,希望能给大家一些参考,也希望鸿蒙的发展越来越好。一、鸿蒙OS简介华为鸿蒙系统是面向万物互联的全场景分布式操作系统。目前鸿蒙OS已经从2.0升级到Beta3.0,支持手机、平板、智能穿戴、智慧屏等多种终端设备运行。提供应用开发、设备开发一站式服务。多终端开发IDE,多语言统一编译,分布式架构Kit,提供屏幕布局控制和交互自动适配,支持拖拽控制,面向预览的可视化编程,让开发者高效构建多终端基于同一个项目自动运行应用,实现真正的一次性开发,多端部署,实现跨设备共享生态。作为万物互联时代的操作系统,“分布式技术”造就了鸿蒙的核心竞争力,在5G万物互联时代具有巨大的优势。2.鸿蒙系统的开发2.1开发语言鸿蒙适合的开发语言有Java、JavaScript、C++。其中Java和JavaScript适用于手机应用的UI界面开发,C++和JavaScript适用于嵌入式设备的UI界面开发。只有用JavaScript编写的UI界面才能跨设备使用。在未来的鸿蒙版本中(计划是3.0),仓颉语言的开发即将上线(仓颉语言是华为自主研发的语言)。目前主要有Java和JavaScript。鸿蒙服务卡开发可以使用Java和JavaScript(华为推荐JavaScript)。Java和JavaScript服务卡场景和能力的区别如下:场景Java卡JS卡版本实时刷新Java使用ComponentProvider进行实时刷新成本较高JS可以做端刷新,但是需要自定义组件HarmonyOS2.0及以上开发方式JavaUI需要在cardprovider同时处理数据和组件,生成ComponentProvider远程渲染JS卡片在用户端加载渲染,provider只需要处理数据,组件和Logical分离HarmonyOS2.0及以上组件支持Text,Image,DirectionalLayout,PositionLayout,DependentLayoutdiv,list,list-item,swiper,stack,image,text,span,progress,button(自定义:chart,clock,calendar)HarmonyOS2.0及以上不支持卡中的动画效果。HarmonyOS2.0及以上版本不支持阴影模糊。HarmonyOS2.0及以上版本不支持动态适配布局。HarmonyOS2.0及以上版本不支持自定义卡。在架构之前,我们首先要了解AOSP(AndroidOpen-SourceProject,安卓开源项目)和GoogleAndroid的区别。AOSP可以随便用,但是只有谷歌认证的Android才能安装GMS和GooglePlay。Google控制着GMS和GooglePlay,无权控制Android。HarmonyOS整体遵循分层设计,从下到上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统>子系统>功能/模块”逐级扩展。在多设备部署场景下,一些不需要的子系统或功能/模块可以根据实际需要裁剪。HarmonyOS的技术架构如下:AOSP大致对应图中的UI框架+用户程序框架+能力框架。Harmony为了兼容Android,使用了部分AOSP代码构建了Android应用兼容层来运行Android应用。鸿蒙框架解析完数据后,将数据交给Android,由Android负责渲染到SurfaceView上。HarmonyOS采用多核设计,支持为不同资源受限的设备选择合适的OS内核。内核抽象层(KAL,KernelAbstractLayer)通过屏蔽多核差异向上层提供基本的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理、外设管理等。系统服务层分布式软总线技术,封装物联网通信技术(NFC、蓝牙、WIFI……)和协议(CoAP、RPC……),数据格式(HarmonyOSIDL)和服务(PA)A做了很好的抽象,使得局域网内的设备之间可以方便地进行通信、交换数据、调用远程服务,而且设备看起来是一体的。框架层为HarmonyOS应用开发提供Java/C/C++/JS/TS等多语言用户程序框架和能力框架,以及两个UI框架(包括Java语言的JavaUI框架和方舟开发框架的JS/TS语言)),以及为各种软硬件服务向公众开放的多语言框架API。应用层包括系统应用和第三方非系统应用。HarmonyOS应用程序由一个或多个FA(FeatureAbility)或PA(ParticleAbility)组成。其中,FA有UI界面,提供与用户交互的能力;而PA没有UI界面,提供后台运行任务的能力和统一的数据访问抽象。FA进行用户交互所需的后台数据访问也需要相应的PA来支持。基于FA/PA开发的应用可以实现特定的业务功能,支持跨设备调度分发,为用户提供一致高效的应用体验。今天我们主要从应用层开发方面入手。3.携程鸿蒙服务卡携程在鸿蒙OS上耕耘已久。基于HarmonyOS的分布式能力,开发了携程机票、手机、手表的联动项目。HarmonyOS推出雾化能力后,推出了携程会员中心、核酸检测、携程火车票服务卡,为用户提供更多选择。3.1开发流程通过HarmonyOS系统能力、开发指导、API参考等文档,使用HUAWEIDevEcoStudio开发工具开发不同设备的应用,为用户带来全场景体验。总结一下,整个开发过程分为几个过程:开发准备、应用开发、应用测试、应用发布。PhaseProcessDevelopment准备成为华为开发者(个人/企业)安装DevEcoStudio配置开发环境编写代码创建项目编写调试代码预览视图布局效果应用测试申请调测证书调试应用隐私、漏洞、性能等测试发布申请发布证书发布适用于华为商城3.2服务卡服务卡(以下简称“卡”)是FA的一种界面展示形式,将FA的重要信息或操作放在卡前,实现直接服务并降低经验值。经过研究,从安卓到鸿蒙,最明显的变化应该就是服务卡了。因此,我们计划以服务卡为切入点,实现携程鸿蒙服务卡的功能。经过版本逐步迭代,会员签到、核酸检测、火车票抢购等功能已经上线。由于在整个开发过程中,可以完成开发准备和发布过程参考文档,这里仅从代码编写和应用测试两个方面来给大家做一个简单的介绍。3.3服务卡开发考虑到快速开发上线的需要,我们研究使用鸿蒙Native+Webview混合开发模式,通过Native层处理持久化等相关能力,在Webview中实现功能。3.3.1鸿蒙Webview实现功能首先,通过XML布局文件进行操作:"/>注意:ohos.agp.components.webengine.WebView和WebView都会提示。但是WebView并不等同于ohos.agp.components.webengine.WebView。这可能是鸿蒙的漏洞。直接输入WebView不能使用该组件。然后在Native代码中实例化Webview:privatevoidinitWebview(){WebConfigwebConfig=webView.getWebConfig();if(null!=webConfig){webConfig.setWebStoragePermit(true);//webConfig.setJavaScriptPermit(true);//如果网页需要使用JavaScript,就加上这一行;webConfig.setSecurityMode(WebConfig.SECURITY_ALLOW);webConfig.setLocationPermit(true);webConfig.setDataAbilityPermit(真);webConfig.setMediaAutoReplay(true);webConfig.isLoadsImagesPermitted();//webview是否下载图片资源webConfig.setTextAutoSizing(true);webConfig.setViewPortFitScreen(true);}setWebViewCookie();this.webView.setWebAgent(newTripWebAgent());webView.load(HEALTH_URL);}3.3.2服务卡配置Card应用是一种特殊的元能力服务。以下项目在其配置文件config.json中声明。系统可以将该应用程序识别为卡应用程序并将其绑定到系统。Config.json文件“abilities”配置表单模块详情如下:":"10:30","defaultDimension":"2*2","name":"health","description":"$string:health_title","colorMode":"auto","type":"Java","supportDimensions":["2*2","2*4"],"portraitLayouts":["$layout:health_2_2","$layout:health_2_4"],"updateEnabled":true,"updateDuration":1}]鸿蒙服务卡有4种尺寸,分别是微卡(1*2)、小卡(2*2)、中卡(2*4)、大卡(4*4)。同一个应用还支持多张不同类型的业务卡,通过卡管理界面可以切换选择不同的大小和类型。其设计初衷是信息展示和直接服务。基于以上原则,我们选取??了携程App中常用的几个功能来实现服务卡。每个函数实现小卡和中卡两种风格。3.4业务卡测试代码开发完成后,即可使用真机进行调试。在使用真机调试之前,需要在调试前对HAP进行签名。详细的调试过程如下图所示。针对原子服务和应用的签名,DevEcoStudio为开发者提供了自动化的签名方案,帮助开发者高效调试。证书管理菜单目前仅供受邀开发者访问。如果AGC页面没有显示证书管理菜单,开发者需要将名称、申请背景、DeveloperID发送至agconnect@huawei.com,等待华为受理。进入File>ProjectStructure>Project>SigningConfigs界面,勾选“Automaticallygeneratesigning”完成签名。如果您发布应用程序/服务,您需要申请数字证书(.cer文件)和配置文件(.p7b文件)以确保其完整性。申请前首先需要通过DevEcoStudio生成密钥(以.p12格式存储在keystore文件中)和证书申请文件(.csr文件),也可以使用命令行工具生成。设置签名信息后,使用DevEcoStudio生成APP。点击Build>BuildHap(s)/APP(s)>BuildAPP(s),等待签名的APP编译构建完成。编译构建后,在build>outputs>app>release目录下可以得到签名后的APP。将HarmonyOS应用打包成APP后,通过AppGalleryConnect将HarmonyOS应用分发到不同的设备上。应用可按照鸿蒙应用发布指南上架华为应用市场。4、未来展望除了华为的HarmonyOS,还有谷歌的Fuchsia、苹果的SiriOS、三星的SmartTings、腾讯的TencentOStiny等。可见,在未来的物联网市场,内向竞争将比内向竞争更加激烈和艰难。智能手机时代的系统。预测。鸿蒙生态链尚处于早期阶段,各方面仍需完善。
