【HarmonyOS Next】鴻蒙中App、HAP、HAR、HSP概念詳解

【HarmonyOS Next】鴻蒙中App、HAP、HAR、HSP概念詳解

在這里插入圖片描述
(圖1-1)

一、鴻蒙中App、HAP、HAR、HSP是什么?


(1)App Pack(Application Package) 是應用發布的形態,上架應用市場是以App Pack形式上架。以 .app 后綴的文件,只能上架到應用市場,不能在設備上直接安裝和運行。


(2)HAP(Harmony Ability Package) 是應用安裝和運行的基本形態。

HAP的兩種類型:
其主要分為兩種類型:entry和feature:
1.entry 是應用的主模塊,作為應用的入口,提供應用的基礎功能,一個 App 中對于同一設備類型必須有且只有一個 entry 類型的 HAP,可獨立安裝運行。

2.feature 是應用的動態特性模塊,作為應用能力的擴展,可以根據用戶的需求和設備類型進行選擇性安裝,一個 App 可以包含一個或多個 feature 類型的 HAP,也可以不含。

模塊配置:
在feature模塊的module.json5配置中,ype有entry和feature兩種值,設置為后者feature,就是feature模塊。
并且deliveryWithInstall設置為false,為按需下載,用戶需通過應用內引導或應用市場手動獲取。

{"module": {"name": "application","type": "feature","description": "$string:module_desc","mainElement": "ApplicationAbility","deviceTypes": ["phone"],"deliveryWithInstall": false,"installationFree": false,"pages": "$profile:main_pages","abilities": [{"name": "ApplicationAbility","srcEntry": "./ets/applicationability/ApplicationAbility.ets","description": "$string:ApplicationAbility_desc","icon": "$media:layered_image","label": "$string:ApplicationAbility_label","startWindowIcon": "$media:startIcon","startWindowBackground": "$color:start_window_background","exported": true}]}
}

如上圖(1-1)所示,feature模塊主要是為了動態功能擴展,按需加載優化,跨設備適配三種效果。

例如,京東APP的直播模塊,就可以設計為feature,用戶點擊直播入口才去加載,減小初始包大小。并且京東APP在車機和手表等不同設備上,可以適配硬件加載不同的feature模塊。

不過需要注意的是,使用feature模塊,需處理 Feature HAP 的加載時機、依賴關系及錯誤處理,避免因模塊未下載導致功能不可用。(如首次使用時的網絡請求和安裝時間)。

feature HAP 是實現輕量化、動態化、跨設備應用的核心機制。一般是面試題目,要好好記住。


(3)HAR(Harmony Archive) 是靜態共享包。說人話,HAR可以理解為SDK依賴,與HSP的區別在加載機制上。

多包(HAP/HSP)引用相同的HAR時,會造成多包間代碼和資源的重復拷貝,從而導致應用包膨大。不過HAR 打包時全部打進引用方的 HSP/HAP 包中,可以節省安裝和加載成本。

**那為什么還需要HAR呢?**是因為加載效率高,HAR在編譯時就被打包到依賴它的每個 HAP 中,在應用啟動時就已經隨 HAP 存在于內存中,后續使用時無需額外加載步驟 ,直接調用即可;而 HSP 是動態共享包,運行時復用,在運行時按需加載,每次使用時都需要額外的查找、加載和初始化等操作,這些操作會消耗一定時間,導致加載效率降低。

并且如果我的HAR包并不會在很多HAP中引用,那做成HAR包的加載效率是比做成HSP包高很多。


(4)HSP(Harmony Shared Package) 是動態共享包,分為應用內HSP和集成態HSP。

詳細區別,參加文檔
【HarmonyOS Next】 鴻蒙應用useNormalizedOHMUrl詳解

跳轉到HSP模塊中的一個頁面,如何實現:
因為HSP中不能創建 UIAbility,那主模塊entry下跳轉到HSP模塊中的頁面需求實現如下:

import { router } from '@kit.ArkUI'; 
import { BusinessError } from '@kit.BasicServicesKit';  
 
struct Index {  message: string = '跳轉到HSP頁面'; build() { Row() { Column() { Button() { Text(this.message) .fontSize(24) } .onClick(() => { // '@bundle:包名(bundleName)/模塊名(moduleName)/路徑/頁面所在的文件名(不加.ets后綴)'router.pushUrl({ url: '@bundle:com.example.gotohsppage/library/ets/pages/Index' }).then(() => { console.info("Go to hSP page success."); }).catch((err: BusinessError) => { console.error(`Go to hSP page failed, code is ${err.code}, message is ${err.message}.`); }) }) .width(200) } .width('100%') } .height('100%') } 
}

(5)總結

綜上所述,HAR 是靜態共享包,HSP 是動態共享包,它們和 HAP(應用的基本功能模塊)一起被打包成 App Pack(應用發布形態)用于應用的發布與分發。

二、鴻蒙中App、HAP、HAR、HSP的關系

在這里插入圖片描述

三、如何創建App、HAP、HAR、HSP

App
Build - Build Hap/APP - Build APP
在這里插入圖片描述

HAP:
1、在工程目錄上單擊右鍵,選擇New > Module。
在這里插入圖片描述
2、在彈出的對話框中選擇Empty Ability模板,點擊Next
3、在New Project Module對話框中,進行feature模塊類型的選擇,配置name,type即可
在這里插入圖片描述

HAR和HSP:

1、鼠標移到工程目錄頂部,單擊右鍵,選擇New > Module,在工程中添加模塊。
在這里插入圖片描述

2、在Choose Your Ability Template界面中,選擇Static Library即為HAR,選擇Shared Library即為HSP。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

配置阿里云yum源

配置阿里云yum源 修改默認的yum倉庫,把原有的移動到創建的目錄里(踢出國外的yum源) # 切換到/ect/yum.repos.d/目錄下 cd /etc/yum.repos.d/ # 新建repo目錄 mkdir repo # 把原有的移動到創建的目錄里 mv ./*.repo ./repo/配置yum源 # 找到…

在C#的MVC框架framework項目的使用ajax,及源碼下載

在C# MVC框架中使用AJAX實現異步請求,有助于提高應用程序的性能和用戶體驗。 在MVC框架framework項目中,ajax使用方法如下 1.在Controller類中,創建一個新的方法(例如:GetRes),該方法處理AJAX請求并返回J…

Linux部署DHCP服務腳本

#!/bin/bash #部署DHCP服務 #userli 20250319#檢查是否為root用戶 if[ "$USER" ! "root" ] thenecho "錯誤:非root用戶,權限不足!"exit 0 fi#配置網絡環境 read -ep "請給本機配置一個IP地址(不…

vulhub Matrix-Breakout

1.下載靶機,打開靶機和kali虛擬機 2.查詢kali和靶機ip 3.瀏覽器訪問 訪問81端口有登陸界面 4.掃描敏感目錄 kali dirb 掃描 一一訪問 robot.txt提示我們繼續找找,可能是因為我們的字典太小了,我們換個掃描器換個字典試下,利用kali自帶的最大…

科普類——雙目立體視覺與 RGBD 相機的簡單對比

雙目立體視覺與 RGBD 相機生成的深度圖在原理、性能和應用場景上有顯著差異。以下是兩者的詳細對比和分析: 1. 原理差異 (1) 雙目立體視覺 (Stereo Vision) 原理: 通過兩個攝像頭模擬人眼視差,計算匹配像素點的水平位移(視差&…

深度學習項目--基于DenseNet網絡的“乳腺癌圖像識別”,準確率90%+,pytorch復現

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 前言 如果說最經典的神經網絡,ResNet肯定是一個,從ResNet發布后,很多人做了修改,denseNet網絡無疑是最成功的…

面試八股 —— Redis篇

重點:緩存 和 分布式鎖 緩存(穿透,擊穿,雪崩) 降級可作為系統的保底策略,適用于穿透,擊穿,雪崩 1.緩存穿透 2.緩存擊穿 3.緩存雪崩 緩存——雙寫一致性 1.強一致性業務&#xff08…

mapbox-gl源碼中解析style加載地圖過程詳解

我將結合 Mapbox GL JS 的源碼示例,一步一步講解 style 的解析和地圖加載過程,幫助大家深入理解其內部機制。 Mapbox GL JS 是一個強大的 Web 地圖庫,利用 WebGL 技術渲染交互式地圖。其核心功能之一是通過樣式(style&#xff09…

瑞薩RA系列使用JLink RTT Viewer輸出調試信息

引言 還在用UART調試程序么?試試JLINK的RTT Viewer吧!不需占用UART端口、低資源暫用、實時性高延時微秒級,這么好的工具還有什么理由不用了! 目錄 一、JLink RTT Viewer 簡介 二、軟件安裝 三、工程應用 3.1 SEGGER_RTT驅動包 3.2 手搓宏定義APP_PRINT 3.3 使用APP_…

MySQL 入門大全:查詢語言分類

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,…

1.Windows+vscode+cline+MCP配置

文章目錄 1.簡介與資源2.在windows中安裝vscode及Cline插件1. 安裝vscode2. 安裝Cline插件3. 配置大語言模型3. 配置MCP步驟(windows) 1.簡介與資源 MCP官方開源倉庫 MCP合集網站 參考視頻 2.在windows中安裝vscode及Cline插件 1. 安裝vscode 2. 安裝Cline插件 Cline插件…

性能測試過程實時監控分析

性能監控 前言一、查看性能測試結果的3大方式1、GUI界面報告插件2、命令行運行 html報告3、后端監聽器接入儀表盤 二、influxDB grafana jmeter測試監控大屏1、原理:2、linux環境中influxDB 安裝和配置3、jmerer后端監聽器連接influxDB4、linux環境總grafana環境搭…

【Linux我做主】淺談Shell及其原理

淺談Linux中的Shell及其原理 Linux中Shell的運行原理github地址前言一、Linux內核與Shell的關系1.1 操作系統核心1.2 用戶與內核的隔離 二、Shell的演進與核心機制2.1 發展歷程2.2 核心功能解析2.3 shell的工作流程1. 用戶輸入命令2. 解析器拆分指令3. 擴展器處理動態內容變量替…

可視化圖解算法:鏈表中倒數(最后)k個結點

1. 題目 描述 輸入一個長度為 n 的鏈表,設鏈表中的元素的值為ai ,返回該鏈表中倒數第k個節點。 如果該鏈表長度小于k,請返回一個長度為 0 的鏈表。 數據范圍:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…

在線教育網站項目第四步:deepseek騙我, WSL2不能創建兩個獨立的Ubuntu,但我們能實現實例互訪及外部訪問

一、說明 上一章折騰了半天,搞出不少問題,今天我們在deepseek的幫助下,完成多個獨立ubuntu24.04實例的安裝,并完成固定ip,實踐證明,deepseek不靠譜,浪費我2個小時時間,我們將在下面實…

CMake 保姆級教程

CMake 是一個跨平臺的構建工具,用于生成適合不同平臺和編譯器的構建系統文件(如 Makefile 或 Visual Studio 項目文件)。 在 Windows 下使用 CMake 構建項目時,CMake 會根據 CMakeLists.txt 文件生成適合 Windows 的構建系統文件&…

zabbix數據庫溯源

0x00 背景 zabbix數據庫如果密碼泄露被登錄并新增管理員如何快速發現?并進行溯源? 本文介紹數據庫本身未開啟access log的情況。 0x01 實踐 Mysql 數據庫查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…

Spring Boot集成PageHelper:輕松實現數據庫分頁功能

Spring Boot集成PageHelper:輕松實現數據庫分頁功能 1. 為什么需要分頁? 分頁是處理大數據量查詢的核心技術,其重要性體現在: 性能優化:避免單次查詢返回過多數據導致內存溢出或響應延遲。用戶體驗:前端展…

Spring Cloud之負載均衡之LoadBalance

目錄 負載均衡 問題 步驟 現象 什么是負載均衡? 負載均衡的一些實現 服務端負載均衡 客戶端負載均衡 使用Spring Cloud LoadBalance實現負載均衡 負載均衡策略 ?編輯 ?編輯LoadBalancer原理 服務部署 準備環境和數據 服務構建打包 啟動服務 上傳J…

數據無憂:自動備份策略全解析

引言 在信息化飛速發展的今天,數據已成為個人、企業乃至國家最為寶貴的資產之一。無論是日常辦公文檔、科研數據、客戶資料,還是個人隱私信息,一旦丟失或損壞,都可能帶來不可估量的損失。因此,備份文件作為數據安全的…