天天看點

攜程鴻蒙應用開發實踐

背景

作為全球領先的一站式旅遊服務平台,攜程始終堅持以技術創新為發展核心。自鴻蒙釋出以來,我們便投入研發力量進行調研、開發,并成功落地了攜程機票項目、服務卡片項目等。現将鴻蒙項目中相關經驗整理分享,希望能給大家一些參考,也希望鴻蒙發展能越來越好。

一、鴻蒙系統簡介

華為鴻蒙HarmonyOS系統是面向萬物互聯的全場景分布式作業系統,目前鴻蒙系統已從2.0更新更新至Beta 3.0,支援手機、平闆、智能穿戴、智慧屏等多種終端裝置運作,提供應用開發、裝置開發的一站式服務。

憑借多終端開發IDE,多語言統一編譯,分布式架構Kit提供螢幕布局控件以及互動的自動适配,支援控件拖拽,面向預覽的可視化程式設計,使開發者可以基于同一工程高效建構多端自動運作App,實作真正的一次開發,多端部署,在跨裝置之間實作共享生态。

作為萬物互聯時代的作業系統,“分布式技術”鑄就了鴻蒙的核心競争力,在5G這個萬物互聯的時代有着巨大的優勢。

二、鴻蒙系統開發

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可以做到端側重新整理,但是需要定制化元件 HarmonyOS 2.0及以上
開發方式 Java UI在卡片提供方需要同時對資料群組件進行處理,生成ComponentProvider遠端渲染 JS卡片在使用方加載渲染,提供方隻要處理資料、元件和邏輯分離 HarmonyOS 2.0及以上
元件支援 Text、Image、DirectionalLayout、PositionLayout、DependentLayout div、list、list-item、swiper、stack、image、text、span、progress、button(定制:chart 、clock、calendar) HarmonyOS 2.0及以上
卡片内動效 不支援 暫不開放 HarmonyOS 2.0及以上
陰影模糊 不支援 支援 HarmonyOS 2.0及以上
動态适應布局 不支援 支援 HarmonyOS 2.0及以上
自定義卡片 不支援 支援 HarmonyOS 2.0及以上

2.2 鴻蒙系統架構

在說明鴻蒙系統架構之前,首先要了解AOSP(Android Open-Source Project,Android 開放源代碼項目)和Google Android的差別。AOSP可以随便用,但隻有經過Google認證的Android才能安裝GMS和Google Play。Google控制的是GMS和Google Play,無權控制Android。

HarmonyOS整體遵從分層設計,從下向上依次為:核心層、系統服務層、架構層和應用層。系統功能按照“系統 > 子系統 > 功能/子產品”逐級展開,在多裝置部署場景下,支援根據實際需求裁剪某些非必要的子系統或功能/子產品。

HarmonyOS技術架構如下所示:

攜程鴻蒙應用開發實踐

AOSP大緻對應圖中的UI架構+使用者程式架構+Ability架構。為了相容Android,Harmony使用了AOSP的部分代碼,用來建構Android應用相容層來運作Android應用。鴻蒙架構解析後将資料交給了Android,由Android的負責将其渲染在SurfaceView上。

HarmonyOS采用多核心設計,支援針對不同資源受限裝置選用适合的OS核心。核心抽象層(KAL,Kernel Abstract Layer)通過屏蔽多核心差異,對上層提供基礎的核心能力,包括程序/線程管理、記憶體管理、檔案系統、網絡管理和外設管理等。

系統服務層分布式軟總線技術将物聯網通訊技術(NFC、藍牙、WIFI……)與協定(CoAP、RPC……)做了良好的封裝,以及對資料格式(HarmonyOS IDL)以及服務(PA)做了良好的抽象,使區域網路内的裝置之間可以友善的通訊、交換資料、調用遠端服務,裝置之間仿佛融為一體。

架構層為HarmonyOS應用開發提供了Java/C/C++/JS/TS等多語言的使用者程式架構和Ability架構,兩種UI架構(包括适用于Java語言的Java UI架構、适用于JS/TS語言的方舟開發架構),以及各種軟硬體服務對外開放的多語言架構API。

應用層包括系統應用和第三方非系統應用。HarmonyOS的應用由一個或多個FA(Feature Ability)或PA(Particle Ability)組成。其中,FA有UI界面,提供與使用者互動的能力;而PA無UI界面,提供背景運作任務的能力以及統一的資料通路抽象。FA在進行使用者互動時所需的背景資料通路也需要由對應的PA提供支撐。基于FA/PA開發的應用,能夠實作特定的業務功能,支援跨裝置排程與分發,為使用者提供一緻、高效的應用體驗。

我們今天主要從應用層開發方面展開。

三、攜程鴻蒙服務卡片

攜程很早就在鴻蒙OS發力,基于HarmonyOS分布式能力,開發了攜程機票手機、手表關聯項目。在HarmonyOS推出原子化能力後,又上線了攜程會員中心、核酸檢測、攜程火車票服務卡片,以期給到使用者更多的選擇。

攜程鴻蒙應用開發實踐

3.1 開發流程

通過HarmonyOS 系統能力、開發指導、API參考等文檔,利用 HUAWEI DevEco Studio 開發工具,開發不同裝置的應用,為使用者帶來全場景體驗。

總結起來,整個開發流程分為開發準備、應用開發、應用測試、應用釋出幾個流程。

階段 流程
開發準備
  1. 成為華為開發者(個人/企業)
  2. 安裝DevEco Studio
  3. 配置開發環境
編寫代碼
  1. 建立工程
  2. 編寫調試代碼
  3. 預覽檢視布局效果
應用測試
  1. 申請調測證書
  2. 調試應用
  3. 隐私、漏洞、性能等測試
釋出
  1. 申請釋出證書
  2. 釋出應用至華為商店

3.2 服務卡片

服務卡片(以下簡稱“卡片”)是FA的一種界面展示形式,将FA的重要資訊或操作前置到卡片,以達到服務直達,減少體驗層級的目的。

攜程鴻蒙應用開發實踐

經調研,從安卓到鴻蒙,最明顯的變化應該就是服務卡片。故我們計劃以服務卡片作為切入點,實作攜程鴻蒙服務卡片功能。經過版本逐漸疊代,目前已上線了會員簽到、核酸檢測、搶火車票等功能。

由于整個開發流程中,開發準備和釋出流程參考文檔即可完成,僅從編寫代碼和應用測試兩方面展開,給大家簡單介紹一下。

3.3 服務卡片開發

考慮快速開發上線的需求,我們調研使用鴻蒙Native+Webview混合開發的模式,通過Native層處理持久化等相關能力,Webview實作功能進行展開。

3.3.1 鴻蒙Webview實作功能

首先,通過XML布局檔案進行操作:

<ohos.agp.components.webengine.WebView
    ohos:id="$+id:health_webview"
    ohos:height="match_parent"
    ohos:width="match_parent"/>           

注意:ohos.agp.components.webengine.WebView和WebView都是有提示的。但WebView與ohos.agp.components.webengine.WebView并不等價,這可能是鴻蒙的一個漏洞,直接輸入 WebView 并不能使用這個元件。

然後在Native代碼中執行個體化Webview:

private void initWebview(){
        WebConfig webConfig = webView.getWebConfig();
        if (null != webConfig){
            webConfig.setWebStoragePermit(true);//
            webConfig.setJavaScriptPermit(true);  // 如果網頁需要使用JavaScript,增加此行;
            webConfig.setSecurityMode(WebConfig.SECURITY_ALLOW);
            webConfig.setLocationPermit(true);
            webConfig.setDataAbilityPermit(true);
            webConfig.setMediaAutoReplay(true);
            webConfig.isLoadsImagesPermitted();//webview是否下載下傳圖檔資源
            webConfig.setTextAutoSizing(true);
            webConfig.setViewPortFitScreen(true);
        }
        setWebViewCookie();
        this.webView.setWebAgent(new TripWebAgent());
        webView.load(HEALTH_URL);
    }           

3.3.2 服務卡片配置

卡片應用是一款特殊的元能力服務,其配置檔案config.json中聲明以下幾項,系統能夠識别該應用為一款卡片應用,并與系統進行綁定。

config.json檔案"abilities"配置forms子產品細節如下:

"forms": [
  {
    "landscapeLayouts": [
      "$layout:health_2_2",
      "$layout:health_2_4"
    ],
    "isDefault": true,
    "scheduledUpdateTime": "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進行簽名後進行調試。詳細的調試流程如下圖所示。

攜程鴻蒙應用開發實踐

針對原子化服務和應用的簽名,DevEco Studio為開發者提供了自動化簽名方案,幫助開發者高效進行調試。

目前隻有受邀請開發者才能通路證書管理菜單。如果AGC頁面未展示證書管理菜單,開發者需發送名稱、申請背景及Developer ID至[email protected],等待華為受理。

進入File > Project Structure > Project > Signing Configs界面,勾選“Automatically generate signing”,即可完成簽名。

攜程鴻蒙應用開發實踐

若釋出應用/服務,需通過申請數字證書(.cer檔案)和Profile檔案(.p7b檔案)來保證其完整性。

申請前,首先需要通過DevEco Studio來生成密鑰(存儲在格式為.p12的密鑰庫檔案中)和證書請求檔案(.csr檔案),同時也可以使用指令行工具的方式來生成。

攜程鴻蒙應用開發實踐

設定完簽名資訊後,使用DevEco Studio生成APP。點選Build > Build Hap(s)/APP(s) > Build APP(s),等待編譯建構完成已簽名的APP。

編譯建構完成後,可以在build > outputs > app > release目錄下,擷取帶簽名的APP。

攜程鴻蒙應用開發實踐

将HarmonyOS應用打包成APP後,通過AppGallery Connect将HarmonyOS應用分發到不同的裝置上。可以根據釋出HarmonyOS應用指導将APP上架到華為應用市場。

四、未來展望

除了華為的HarmonyOS,還有谷歌的Fuchsia、蘋果的SiriOS、三星SmartTings、騰訊TencentOS tiny等等,可見未來IOT市場中,内卷競争化會比智能手機時代的作業系統更加劇烈和難以預測。鴻蒙生态鍊仍處于早期階段,各方面仍待完善。

參考文檔:

1、HarmonyOS Developer

https://developer.harmonyos.com/

2、HarmonyOS原子化服務

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/atomic-service-definition-0000001090840664

3、服務卡片開發簡介

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-widget-provider-intro-0000001150722105

4、鴻蒙開源代碼

https://gitee.com/explore/harmonyos-advanced

5、HarmonyOS到底是不是Android套皮?

https://mp.weixin.qq.com/s/Uw9_zE_k_jRUN-Frol535A

6、HarmonyOS真機調試

https://developer.huawei.com/consumer/cn/forum/topic/0203461929487310027

【作者簡介】

Gordon,攜程資深移動開發工程師,關注鴻蒙開發。

繼續閱讀