DevEcoHvigor是使用TypeScript語(yǔ)言開(kāi)發(fā)的全新輕量化的任務(wù)調(diào)度工具,針對(duì)HarmonyOS應(yīng)用提供了一系列編譯構(gòu)建任務(wù),支持將HarmonyOS應(yīng)用編譯構(gòu)建出對(duì)應(yīng)的產(chǎn)物包。作為一款HarmonyOS應(yīng)用編譯構(gòu)建任務(wù)流工具,DevEco Hvigor具備許多可以提升構(gòu)建效率的特性,支持多產(chǎn)物差異化構(gòu)建,也支持HarmonyOS應(yīng)用可分可合等特性。可以稱(chēng)得上是"麻雀雖小五臟俱全"。
一
任務(wù)并行
DevEco Hvigor具備任務(wù)并行執(zhí)行的能力。對(duì)于C++編譯、ArkTS任務(wù)等耗時(shí)而沒(méi)有依賴(lài)關(guān)系的任務(wù),DevEcoHvigor可以使用不同的工作線(xiàn)程并行執(zhí)行,提高構(gòu)建效率。在多模塊的中大型工程中,將帶來(lái)可觀(guān)的耗時(shí)節(jié)省。
在DevEco Studio中開(kāi)啟DevEco Hvigor的并行編譯構(gòu)建能力,需要在DevEcoStudio中打開(kāi)Settings - Build, Execution,Development - Build Tools - Hvigor選項(xiàng),并勾選"Executetasks in parallel mode"。
二
任務(wù)增量
HarmonyOS應(yīng)用的編譯構(gòu)建流程是由任務(wù)組成的。DevEco Hvigor具備任務(wù)增量執(zhí)行的能力,通過(guò)判斷任務(wù)的輸入與輸出,對(duì)于輸入與輸出沒(méi)有變化的任務(wù),可以復(fù)用上次構(gòu)建產(chǎn)物,從而跳過(guò)對(duì)應(yīng)的任務(wù),節(jié)省構(gòu)建時(shí)間。在DevEco Studio中開(kāi)啟DevEco Hvigor的任務(wù)增量能力,需要在DevEco Studio中打開(kāi)Settings - Build,Execution, Development - Build Tools - Hvigor選項(xiàng),并勾選"Re-execute the task in incremental mode"。
三
常駐進(jìn)程
DevEco Hvigor提供了常駐進(jìn)程的功能機(jī)制。通過(guò)將進(jìn)程常駐在內(nèi)存中,一方面避免了Node進(jìn)程重復(fù)啟動(dòng)、減少了加載js文件的耗時(shí),另一方面可以復(fù)用構(gòu)建過(guò)程中的增量緩存、減少增量緩存信息的讀取與落盤(pán)操作。另外,啟用DevEco Hvigor的常駐進(jìn)程功能,還可以支持預(yù)覽器的急速預(yù)覽功能和調(diào)試的Hot reload功能。DevEco Hvigor通過(guò)對(duì)代碼文件的監(jiān)聽(tīng),可以快速編譯代碼片段,急速更新預(yù)覽畫(huà)面和在設(shè)備上實(shí)時(shí)調(diào)試代碼修改。
在DevEco Studio中開(kāi)啟DevEco Hvigor的常駐進(jìn)程構(gòu)建能力,需要在DevEcoStudio中打開(kāi)Settings - Build, Execution,Development - Build Tools - Hvigor選項(xiàng),并勾選"Enablethe Daemon for tasks"。
在命令行中,可以通過(guò)使用hvigorw命令行工具來(lái)查看常駐進(jìn)程狀態(tài)或關(guān)閉常駐進(jìn)程。
-
在工程目錄下執(zhí)行./hvigorw --status-daemon,可以查看所有常駐進(jìn)程的狀態(tài)。
-
在工程目錄下執(zhí)行./hvigorw --stop-daemon,可以關(guān)閉當(dāng)前工程對(duì)應(yīng)的常駐進(jìn)程。
-
在工程目錄下執(zhí)行./hvigorw --stop-daemon-all,可以關(guān)閉當(dāng)前運(yùn)行的所有DevEco Hvigor常駐進(jìn)程。
四
構(gòu)建過(guò)程可視化
DevEco Hvigor會(huì)記錄每次構(gòu)建任務(wù)的日志信息,并通過(guò)可視化的圖表界面進(jìn)行展示。記錄的信息包括任務(wù)執(zhí)行的耗時(shí)與線(xiàn)程、ArkTS編譯中的各環(huán)節(jié)的細(xì)分耗時(shí)情況等。開(kāi)發(fā)者可以藉此分析構(gòu)建過(guò)程中的耗時(shí)情況、進(jìn)而改善構(gòu)建效率。
在DevEco Studio中開(kāi)啟DevEco Hvigor的常駐進(jìn)程構(gòu)建能力,需要在DevEcoStudio中打開(kāi)Settings - Build, Execution,Development - Build Tools - Hvigor選項(xiàng),并勾選"Enablethe Daemon for tasks"。
隨后,可以點(diǎn)擊DevEco Studio下方的"Build Analyzer"標(biāo)簽頁(yè),查看構(gòu)建過(guò)程中的日志信息和耗時(shí)情況。
五
差異化構(gòu)建打包
通常情況下,應(yīng)用廠(chǎng)商會(huì)根據(jù)不同的部署環(huán)境、不同的目標(biāo)人群以及不同的運(yùn)行環(huán)境等,將同一個(gè)應(yīng)用定制為不同的版本。DevEcoHvigor支持差異化構(gòu)建打包,在構(gòu)建配置文件中將差異化部分顯示配置出來(lái),即可在編譯構(gòu)建過(guò)程中實(shí)現(xiàn)一個(gè)應(yīng)用構(gòu)建出不同的目標(biāo)產(chǎn)物版本,從而實(shí)現(xiàn)源代碼、資源文件等的高效復(fù)用。
通過(guò)配置Target,每個(gè)HAP包都可以定制功能和資源。在每個(gè)HAP模塊的build-profile.json5中,可以配置該模塊支持的Targets:
{
"apiType": 'stageMode',
"buildOption": {
},
"targets": [ //定義不同的target
{
"name": "default", //默認(rèn)target名稱(chēng)default
"runtimeOS": "HarmonyOS",
},
{
"name": "free", //免費(fèi)版target名稱(chēng)
"runtimeOS": "HarmonyOS"
},
{
"name": "pay", //付費(fèi)版target名稱(chēng)
"runtimeOS": "HarmonyOS",
}
]
}
(左右滑動(dòng)查看更多)
在每個(gè)target中,可以定制其頁(yè)面源碼集、資源目錄、支持的設(shè)備類(lèi)型等,比如當(dāng)你只希望某個(gè)hap對(duì)應(yīng)平板設(shè)備、而某個(gè)hap包對(duì)應(yīng)手機(jī)配置時(shí),可以如下配置:
{
"apiType": 'stageMode',
"buildOption": {
},
"targets": [
{
"name": "default",
"runtimeOS": "HarmonyOS",
},
{
"name": "phone",
"runtimeOS": "HarmonyOS",
"config": {
"deviceType": [ //定義free支持的設(shè)備類(lèi)型為phone
"phone"
]
}
},
{
"name": "tablet",
"runtimeOS": "HarmonyOS",
"config": {
"deviceType": [ //定義pay支持的設(shè)備類(lèi)型為phone
"tablet"
]
}
}
]
}
(左右滑動(dòng)查看更多)通過(guò)配置將哪些HAP模塊的Target與Product綁定,讓定制化的HAP可以組合成APP包、發(fā)布上架應(yīng)用市場(chǎng)。在工程級(jí)的build-profile.json5中,先定義Product,并可以定制使用不同的bundleName和簽名材料:
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"bundleName": "com.example00.com", //定義default的bundleName信息
"signingConfig": "default" //定義default的簽名文件信息
},
{
"name": "productA",
"bundleName": "com.example01.com", //定義productA的bundleName信息
"signingConfig": "productA" //定義productA的簽名文件信息
},
{
"name": "productB",
"bundleName": "com.example02.com", //定義productB的bundleName信息
"signingConfig": "productB" //定義productB的簽名文件信息
}
]
}
(左右滑動(dòng)查看更多)再定義需要將哪些HAP模塊的Target與Product綁定,就可以在上架應(yīng)用商店時(shí)提供不同的APP包。
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"bundleName": "com.example00.com",
"signingConfig": "default"
},
{
"name": "productA",
"bundleName": "com.example01.com",
"signingConfig": "productA"
},
{
"name": "productB",
"bundleName": "com.example02.com",
"signingConfig": "productB"
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default", //將default target分別打包到default、productA和productB APP中
"applyToProducts": [
"default",
"productA",
"productB"
]
},
{
"name": "free", //將free target打包到productA APP中
"applyToProducts": [
"productA"
]
},
{
"name": "pay", //將pay target打包到productB APP中
"applyToProducts": [
"productB"
]
}
]
}
]
}
(左右滑動(dòng)查看更多)最后,在DevEco Studio中,可以使用可視化界面來(lái)選擇運(yùn)行和調(diào)試指定模塊和Target。從DevEco Studio界面的右上角打開(kāi)面板,執(zhí)行需要調(diào)試或運(yùn)行的Target,DevEco Hvigor就會(huì)執(zhí)行指定模塊、指定Target的編譯構(gòu)建,并在預(yù)覽和調(diào)試中都使用該配置。
六
未來(lái)特性與總結(jié)
目前,DevEcoHvigor作為全新開(kāi)發(fā)的編譯構(gòu)建工具,雖然已經(jīng)有了不少可以提升編譯效率的地方,但仍有許多新的特性、功能和性能優(yōu)化還在路上。比如,DevEcoHvigor即將開(kāi)放的自定義構(gòu)建任務(wù)插件能力和編譯流程插樁接口、在運(yùn)行時(shí)獲取構(gòu)建配置的BuildProfile機(jī)制等。我們會(huì)繼續(xù)努力,力求將更好的編譯效率、更便捷的構(gòu)建體驗(yàn),帶給每一位HarmonyOS應(yīng)用的開(kāi)發(fā)者。-
HarmonyOS
+關(guān)注
關(guān)注
79文章
1967瀏覽量
30025
原文標(biāo)題:【技術(shù)視界】DevEco Hvigor高效編譯,構(gòu)建過(guò)程新秘籍
文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論