【HarmonyOS Next之旅】DevEco Studio使用指南(三十八) -> 構建HAR

目錄

1 -> 前言

2 -> 使用約束

3 -> 創建模塊

4 -> 構建HAR

4.1 -> 以debug模式構建HAR

4.2 -> 以release模式構建HAR

4.3 -> 構建字節碼格式的HAR

4.4 -> 對HAR進行簽名


1 -> 前言

構建模式:DevEco Studio默認提供debug和release兩種構建模式,同時支持開發者自定義構建模式。

產物格式:構建出的HAR包產物分為包含源碼的HAR、包含js中間碼的HAR以及包含字節碼的HAR三種產物格式。

debug構建模式時,從DevEco Studio NEXT Beta1(5.0.3.800)版本開始,默認產物是字節碼HAR,用于開發者進行本地調測,可提升編譯構建效率;同時支持構建包含源碼的HAR。

release構建模式時,從DevEco Studio NEXT Developer Beta3(5.0.3.600)版本開始,默認不開啟混淆,構建產物和debug模式相同;開啟混淆后,構建產物是包含js中間碼的HAR,用于發布到ohpm中心倉;同時支持配置產物格式為字節碼HAR,用于提升發布產物的安全性。

2 -> 使用約束

  • HAR包不支持在module.json5中配置extension組件。
  • HAR包不支持pages路由配置。
  • HAR自身的構建不建議引用本地模塊,可能導致其他模塊依賴該HAR包時安裝失敗,如果安裝失敗,需要在工程級oh-package.json5中配置overrides。
  • 以release模式構建HAR時,對ArkTS代碼的混淆僅支持API 10及以上的Stage模型。
  • 引用字節碼Har包時,當字節碼Har包的API版本高于工程的compatibleSDKVersion時,不可用。
  • 字節碼Har包和Hap工程的compatibleSDKVersion均為API 12時,當字節碼Har包的compatibleSdkVersionStage高于Hap工程的compatibleSdkVersionStage時,不可用。

3 -> 創建模塊

1. 新建工程時選擇API 10及以上的Stage模型,工程創建完成后,新建“Static Library”模塊。

2. 編寫代碼。

? library ?// HAR根目錄
? ├─libs ?// 存放用戶自定義引用的Native庫,一般為.so文件
? └─src
? │ ? └─main
? │ ? ? ├─cpp
? │ ? ? │ ?├─types ?// 定義Native API對外暴露的接口 ?
? │ ? ? │ ?│ ?└─liblibrary ?
? │ ? ? │ ?│ ? ? ?├─index.d.ts
? │ ? ? │ ?│ ? ? ?└─oh-package.json5?
? │ ? ? │ ?├─CMakeLists.txt ?// CMake配置文件 ?
? │ ? ? │ ?└─napi_init.cpp ?// C++源碼文件
? │ ? ? └─ets ?// ArkTS源碼目錄
? │ ? ? │ ?└─components
? │ ? ? │ ? ? └─MainPage.ets
? │ ? ? ├─resources ?// 資源目錄,用于存放資源文件,如圖片、多媒體、字符串等 ?
? │ ? ? └─module.json5 ?// 模塊配置文件,包含當前HAR的配置信息 ?
? ├─build-profile.json5 ?// Hvigor編譯構建所需的配置文件,包含編譯選項
? ├─hvigorfile.ts ?// Hvigor構建腳本文件,包含構建當前模塊的插件、自定義任務等
? ├─Index.ets ?// HAR的入口文件,一般作為出口定義HAR對外提供的函數、組件等 ??
? └─oh-package.json5 ?// HAR的描述文件,定義HAR的基本信息、依賴項等

3. 在oh-package.json5中“main”字段定義導出文件入口。若不設置“main”字段,默認以當前目錄下Index.ets為入口文件,依據.ets>.ts>.js的順序依次檢索。以將ets/components/MainPage.ets文件設置為入口文件為例:

{..."main": "./src/main/ets/components/MainPage.ets",...
}

4 -> 構建HAR

4.1 -> 以debug模式構建HAR

產物是包含源碼的HAR包,其中包含源碼、資源文件以及配置文件等,方便開發者進行本地調測,不包含build、node_modules、oh_modules、.cxx、.previewer、.hvigor、.gitignore、.ohpmignore、.gitignore/.ohpmignore中配置的文件、cpp工程的CMakeLists.txt。

說明

  • 如果是native工程,以debug模式構建的native產物中不包含調試信息和符號表,如需調試,請參考三方源碼調試。
  • 從5.0.3.403版本開始,不再建議使用相對路徑跨模塊引用代碼文件,若歷史工程存在此場景的跨模塊引用,會出現warning告警,請嘗試將該文件移至本模塊內,再重新進行編譯。
  • 從5.0.3.403版本開始,以debug/release模式構建HAR的流程使用相同的語法校驗規則,若歷史工程出現ArkTS語法報錯,請按照報錯信息修改代碼,以符合ArkTS語言規范。

1. 將工程級build-profile.json5中的useNormalizedOHMUrl字段設置為false。

說明

使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程級build-profile.json5的useNormalizedOHMUrl字段默認值為false,無需執行本步驟。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}

2. 點擊DevEco Studio右上角圖標

Build Mode選擇debug。默認為<Default>模式:在編譯App時使用release模式,編譯HAP/HSP/HAR時使用debug模式。

3. 若部分工程源文件無需構建到HAR包中,可在module目錄下新建.ohpmignore文件,配置打包時要忽略的文件,支持正則表達式寫法。將無需打包進HAR包的文件/文件夾名稱寫入.ohpmignore文件中。DevEco Studio構建時將過濾掉.ohpmignore文件中所包含的文件/文件夾。

4. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。

構建完成后,build目錄下生成HAR包產物。

HAR包產物解壓后,結構如下:

4.2 -> 以release模式構建HAR

從DevEco Studio NEXT Developer Beta3(5.0.3.600)版本開始,默認不開啟混淆,構建產物和debug模式相同,請參考???????以debug模式構建HAR。

開啟混淆后,構建產物是包含js中間碼的HAR包,其中包含源碼混淆后生成的js中間碼文件、資源文件、配置文件、readme、changelog聲明文件、license證書文件,用于發布到ohpm中心倉。

1. 點擊DevEco Studio右上角圖標

Build Mode中選擇release。默認為<Default>模式:在編譯App時使用release模式,編譯HAP/HSP/HAR時使用debug模式。

在???????編譯模式為release時,為保護代碼資產,建議開啟混淆,在模塊級build-profile.json5文件的release的buildOptionSet配置中,將obfuscation/ruleOptions下的enable字段設置為true。

{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {// 混淆相關參數"obfuscation": {"ruleOptions": {// true表示進行混淆,false表示不進行混淆。5.0.3.600及以上版本默認為false"enable": true,// 混淆規則文件"files": ["./obfuscation-rules.txt"]},// consumerFiles中指定的混淆配置文件會在構建依賴這個library的工程或library時被應用"consumerFiles": ["./consumer-rules.txt"]}},},],"targets": [{"name": "default"}]
}

3. 將工程級build-profile.json5中的useNormalizedOHMUrl字段設置為false。

說明

使用DevEco Studio NEXT Beta1(5.0.3.800)之前的版本,工程級build-profile.json5的useNormalizedOHMUrl字段默認值為false,無需執行本步驟。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": false}}}]}
}

4. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。

構建完成后,build目錄下生成HAR包產物。

HAR包產物解壓后,結構如下:

4.3 -> 構建字節碼格式的HAR

默認產物是包含字節碼的HAR包,其中包含abc字節碼、資源文件、配置文件、readme、changelog聲明文件、license證書文件,提升發布到ohpm中心倉產物的安全性。

由于字節碼HAR包中包含的是編譯后的abc字節碼,因此當字節碼HAR被其他應用模塊(HAP/HSP)依賴時,在執行應用模塊的編譯構建時,不需要再對依賴的HAR中的代碼進行語法檢查和編譯等操作,相比包含源碼的HAR和包含js中間碼的HAR,可以有效提升應用模塊的編譯構建效率。

說明

  • 由于構建字節碼HAR需要生成二進制的格式,所以單獨構建字節碼HAR會比構建非字節碼HAR耗時更多。
  • 當字節碼HAR被集成使用時,那么該工程的build-profile.json5中的useNormalizedOHMUrl必須設置為true。
  • 如果字節碼HAR未開啟混淆,則后續字節碼HAR被集成使用時,將不會再對HAR包進行混淆。
  • 字節碼HAR使用的依賴需要配置在本模塊的oh-package.json5的dependencies或dynamicDependencies中,如果不配置,后續字節碼HAR被集成時會出現運行時異常。
  • 支持使用不同構建模式進行構建,與構建HAP/HSP相同。

1. 將工程級build-profile.json5的useNormalizedOHMUrl設置為true。

說明

從DevEco Studio NEXT Beta1(5.0.3.800)版本開始,工程級build-profile.json5中useNormalizedOHMUrl字段默認為true,byteCodeHar缺省默認值為true,無需執行步驟1和2。

{"app": {"products": [{"buildOption": {"strictMode": {"useNormalizedOHMUrl": true}}}]}
}

2. 在HAR模塊的build-profile.json5中,將byteCodeHar設置為true。

{"buildOption": {"arkOptions": {"byteCodeHar": true}}
}

3. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。

構建完成后,build目錄下生成HAR包產物。

HAR包產物解壓后,結構如下:

4.4 -> 對HAR進行簽名

DevEco Studio在構建HAR流程的基礎上,支持對HAR進行簽名。簽名后的HAR包后續可用于接入生態市場。

說明

1. 該能力只在Compatible SDK 5.0.0(12)及以上版本的SDK中支持。

2. 該能力需開啟Hvigor的Daemon能力,請確保當前工程開啟了Daemon,打開Settings > Build,Execution,Deployment > Build Tools > Hvigor,勾選字段Enable the Daemon for tasks。

    1. 在hvigor-config.json5中,開啟構建簽名HAR開關:

    {"properties": {"ohos.sign.har": true}
    }

    2. 配置工程簽名信息,配置流程請參考???????配置簽名信息。

    3. 選中HAR模塊的根目錄,點擊Build > Make Module '<module-name>'啟動構建。

    構建完成后,build目錄下生成簽名HAR包產物。


    感謝各位大佬支持!!!

    互三啦!!!

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

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

    相關文章

    93、【OS】【Nuttx】【構建】cmake menuconfig 目標

    【聲明】本博客所有內容均為個人業余時間創作&#xff0c;所述技術案例均來自公開開源項目&#xff08;如Github&#xff0c;Apache基金會&#xff09;&#xff0c;不涉及任何企業機密或未公開技術&#xff0c;如有侵權請聯系刪除 背景 接之前 blog 【OS】【Nuttx】【構建】cm…

    React 表單處理:移動端輸入場景下的卡頓問題與防抖優化方案

    文章目錄每日一句正能量前言一、問題場景與表現二、技術攻堅過程三、優化效果與經驗沉淀每日一句正能量 山再高&#xff0c;往上攀&#xff0c;總能登頂&#xff1b;路再長&#xff0c;走下去&#xff0c;終將到達。每日一勵&#xff0c;勇往直前。 前言 在移動端 React 項目開…

    數據安全防護所需要的關鍵要素

    數據安全防護是一個覆蓋數據全生命周期&#xff08;采集、存儲、傳輸、處理、銷毀&#xff09;、融合技術、管理、流程與人員的系統性工程。其核心目標是保障數據的??保密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;、可用性&#…

    【JavaEE】(8) 網絡原理 HTTP/HTTPS

    一、什么是 HTTP 協議 上節說到&#xff0c;應用層的協議需要約定通信的內容和數據格式。我們可以自定義應用層協議&#xff0c;也可以基于現成的應用層協議進行開發。協議的種類很多&#xff0c;最常見的之一就是 HTTP&#xff0c;廣泛用于網站和手機 App。準確來說&#xff0…

    C語言的數組與字符串練習題4

    C語言的數組與字符串練習題4 16. 數組元素去重 題目描述: 編寫一個C程序,輸入一組整數存儲在數組中,去除數組中的重復元素,并輸出去重后的數組。 解題思路: 遍歷數組,對于每個元素,檢查它之前是否已經存在相同的元素。如果不存在,則將其保留;否則,跳過。可以使用一…

    Transformers簡單介紹 - 來源于huggingface

    Transformers介紹 - 來源于huggingface 文章目錄Transformers介紹 - 來源于huggingfaceTransformers能做什么pipeline()函數零樣本分類推理API完形填空命名實體識別問答摘要提取翻譯transformers是如何工作的transformers的具體組成注意力層機制transformers原始結構architectu…

    template<typename R = void> 意義

    在 C 中&#xff0c;template<typename R void> 表示定義一個模板參數 R&#xff0c;其默認類型為 void。這意味著&#xff1a;如果用戶沒有顯式指定 R&#xff0c;則 R 默認為 void。如果用戶顯式指定了 R&#xff08;如 template<typename R void> 后面跟著 &l…

    國產3D大型裝配設計新突破①:圖紙打開設計雙加速 | 中望3D 2026

    本文為CAD芯智庫整理&#xff0c;未經允許請勿復制、轉載&#xff01;在中望3D 2026的新版中&#xff0c;不僅在設計效率上進行了重大優化&#xff0c;更是在裝配方面實現了突破性的改進&#xff0c;讓每一個項目都能快速、精確地從概念變為現實。 中望3D2026亮點速遞裝配篇將…

    游戲開發狀態機與行為樹的優缺點

    在游戲開發中&#xff0c;狀態機&#xff08;Finite State Machine, FSM&#xff09; 和行為樹&#xff08;Behavior Tree, BT&#xff09; 是兩種常用的 AI 邏輯控制框架&#xff0c;分別適用于不同場景&#xff0c;其優缺點對比可從靈活性、維護成本、適用場景等多個維度分析…

    Linux下ELF文件的介紹

    目錄 1.溫故知新 2.ELF文件介紹 3.ELF文件組成 4.ELF文件形成到加載 5.連接過程 1.溫故知新 上一篇博客&#xff0c;我們介紹了我們的動靜態&#xff0c;知道了我們的庫其實也是文件&#xff0c;如果我們想寫一個庫也是可以的&#xff0c;我們的把我們的庫文件編譯成.o文件…

    人工智能領域、圖歐科技、IMYAI智能助手2025年6月更新月報

    2025年6月AI領域重要模型更新與平臺優化匯總 摘要&#xff1a; 本文匯總了2025年6月期間AI領域發布的多項重要模型更新及平臺功能優化信息&#xff0c;涵蓋Google Gemini、阿里通義萬相、字節豆包、百度文心一言、MiniMax海螺02、Google Veo3、快手可靈2.1、FLUX Kontext等模型…

    從零開始學Express,理解服務器,路由于中間件

    當我們初學前端時&#xff0c;常常只關注頁面效果和交互&#xff0c;但隨著項目復雜度提升&#xff0c;我們遲早會遇到“服務端”的問題&#xff1a;如何讓一個頁面的數據是從數據庫來的&#xff1f;怎么讓不同的用戶看到不同的內容&#xff1f;這時候&#xff0c;我們就需要一…

    Codeforces Round 987 (Div. 2)

    ABC 略D預處理出每個位置的前綴最大和后綴最小。從后向前枚舉&#xff0c;如果一個數無法后移&#xff0c;那么答案就是最大前綴&#xff0c;否則答案要不是前綴最大&#xff0c;要不就是這個數先移到前綴最大位置再移到能移到的最大的位置此處的答案。用線段樹維護#include<…

    Javascript/ES6+/Typescript重點內容篇——手撕(待總結)

    前端核心知識點梳理與面試題詳解 1. Promise 核心知識點 Promise 是異步編程的解決方案&#xff0c;用于處理異步操作三種狀態&#xff1a;pending&#xff08;進行中&#xff09;、fulfilled&#xff08;已成功&#xff09;、rejected&#xff08;已失敗&#xff09;狀態一旦改…

    [自動化Adapt] 父子事件| 冗余過濾 | SQLite | SQLAlchemy | 會話工廠 | Alembic

    第五章&#xff1a;事件處理與融合 歡迎回到OpenAdapt探索之旅~ 在第四章&#xff1a;系統配置中&#xff0c;我們掌握了如何定制化系統參數。更早的第一章&#xff1a;錄制引擎則展示了系統如何捕獲海量原始操作數據。 假設我們需要訓練機器人輸入"hello"一詞。原…

    組合期權:跨式策略

    文章目錄0.簡介1.買入跨式組合&#xff08;Long Straddle&#xff09;1.1 適用場景?1.2 合約選擇1.3 損益分析1.4 案例示范2.賣出跨式組合&#xff08;Short Straddle&#xff09;2.1 適用場景?2.2 合約選擇2.3 損益分析2.4 案例示范3.小結參考文獻0.簡介 跨式策略是一種交易…

    Vue計算屬性詳解2

    可寫計算屬性 計算屬性默認是只讀的,但在特殊場景下,我們可以創建"可寫"的計算屬性,通過同時提供getter和setter實現: <script setup>import { ref, computed } from vueconst firstName = ref(John)const lastName = ref(Doe)const fullName = computed(…

    UniStorm 5.3.0 + Unity2022 + URP配置說明

    一、前言 以前我用的是UniStorm3.0&#xff0c;主要用在內置管線里面&#xff0c;最近想在URP管線里面使用UniStorm天氣系統&#xff0c;于是弄了UniStorm5.3.0的包&#xff0c;在Unity2022.3的URP模式下配置&#xff0c;直接導入package&#xff0c;兩次宣告失敗。最后看了官方…

    力扣經典算法篇-44-組合總和(回溯問題)

    1、題干 給你一個無重復元素的整數數組candidates和一個目標整數 target &#xff0c;找出 candidates 中可以使數字和為目標數 target 的 所有 不同組合 &#xff0c;并以列表形式返回。你可以按 任意順序 返回這些組合。 candidates 中的 同一個 數字可以 無限制重復被選取 。…

    矩陣與高斯消元:數學算法在計算機領域的應用

    一、概述和基本概念 矩陣&#xff0c;類似于在 C 中我們看到的二維數組。它有兩個維度&#xff0c;行和列。下面是一個典型的矩陣&#xff1a; M[12342345445610111213] M \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 3 & 4 & 5 \\ 4 & 4 & 5 &…