OpenHarmony應(yīng)用編譯 - 如何在源碼中編譯復(fù)雜應(yīng)用(4.0-Release)
想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:
概述
文檔環(huán)境
- 開發(fā)環(huán)境:Windows 11
- 編譯環(huán)境:Ubuntu 22.04
- 開發(fā)板型號:DAYU 200(RK3568)
- 系統(tǒng)版本:OpenHarmony-4.0-Release
- 涉及倉庫:applications_launcher
功能簡介
- 在OpenHarmony系統(tǒng)中預(yù)安裝應(yīng)用的hap包會隨系統(tǒng)編譯打包到鏡像中,目前有兩種編譯預(yù)安裝應(yīng)用hap包的方式,一種為隨系統(tǒng)編譯時,編譯應(yīng)用源碼生成hap包的方式,另一種是將已生成的hap包放入系統(tǒng)源碼中,再進(jìn)行打包的方式。后者需要開發(fā)者使用DevEco Studio或其它途徑,把應(yīng)用源碼編譯構(gòu)建為hap包,再將hap放入系統(tǒng)源碼中。
- 在OpenHarmony應(yīng)用編譯 - 如何在源碼中編譯復(fù)雜應(yīng)用(3.2-Release)文章中,介紹了如何在3.2Release版本的系統(tǒng)源碼中編譯系統(tǒng)應(yīng)用Launcher。本文檔將繼續(xù)以Launcher為例,帶大家了解如何通過4.0Release的系統(tǒng)源碼編譯應(yīng)用的方式來打包預(yù)安裝應(yīng)用。
- 由于應(yīng)用依賴和構(gòu)建工具的升級和替換,3.2Release系統(tǒng)編譯構(gòu)建應(yīng)用的方式是NPM+Webpack,而4.0Release使用OHPM+Hvigor的方式進(jìn)行構(gòu)建,差別較大。
4.0-Release系統(tǒng)編譯Launcher
由于Launcher自身原因,導(dǎo)致需要做2處改動才可進(jìn)行源碼編譯構(gòu)建。本步驟并非所有項(xiàng)目通用,如果新建的項(xiàng)目可以跳過本步驟,后續(xù)Launcher或工具更新后也不需要本步驟。
適配系統(tǒng)源碼中NODE_HOME環(huán)境變量的配置,需要修改應(yīng)用目錄下hvigorw工具為最新。
文件位置:applications/standard/launcher/hvigorw
內(nèi)容如下:
#!/bin/bash
# ----------------------------------------------------------------------------
# Hvigor startup script, version 1.0.0
#
# Required ENV vars:
# ------------------
# NODE_HOME - location of a Node home dir
# or
# Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------
HVIGOR_APP_HOME="`pwd -P`"
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {
echo ""
echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
error() {
echo ""
echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}
fail() {
error "$@"
exit 1
}
# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];then
EXECUTABLE_NODE="${NODE_HOME}/bin/node"
if [ ! -x "$EXECUTABLE_NODE" ];then
fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"
fi
else
EXECUTABLE_NODE="node"
which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi
# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi
# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \
"${HVIGOR_WRAPPER_SCRIPT}" "$@"
由于系統(tǒng)編譯應(yīng)用目前不支持配置產(chǎn)品,所以需要把Launcher應(yīng)用源碼中有關(guān)pad的構(gòu)建項(xiàng)刪除。
文件位置:applications/standard/launcher/build-profile.json5
內(nèi)容如下:
{
...
{
"name": "phone_launcher",
"srcPath": "./product/phone",
"targets": [
{
"name": "default",
"applyToProducts": [
"default",
],
},
],
},
{
"name": "launcher_settings",
"srcPath": "./feature/settings",
"targets": [
{
"name": "default",
"applyToProducts": [
"default",
],
},
],
}
],
}
文件位置:applications/standard/launcher/feature/settings/build-profile.json5。
內(nèi)容如下:
{
"apiType": 'stageMode',
"buildOption": {
},
"targets": [
{
"name": "default",
}
],
"entryModules": ["phone_launcher"]
}
刪除或注釋系統(tǒng)中默認(rèn)的Launcher應(yīng)用hap包編譯方式。
文件位置:applications/standard/hap/BUILD.gn 。
group("hap") {
deps = [
...
# "http://applications/standard/hap:launcher_hap", // 直接刪除或注釋,不參與編譯
# "http://applications/standard/hap:launcher_settings_hap", // 直接刪除或注釋,不參與編譯
...
]
}
在applications/standard/launcher目錄中增加BUILD.gn文件。
內(nèi)容如下:
import("http://build/ohos.gni")
ohos_app("launcher_OS") {
part_name = "prebuilt_hap"
subsystem_name = "applications"
hap_name = "Launcher_OS"
certificate_profile = "./signature/launcher.p7b"
module_libs_dir = "entry"
module_install_dir = "app/com.ohos.launcher"
js_build_mode = "release"
build_level = "module"
assemble_type = "assembleHap"
}
說明:
- 此處產(chǎn)物名稱hap_name定義為Launcher_OS是為了區(qū)分原系統(tǒng)源碼中默認(rèn)的hap包名稱,實(shí)際可以填寫為Launcher或任意值。
- BUILD.gn的模板參數(shù)可以參考編譯系統(tǒng)提供的模板。
在applications/standard/hap/ohos.build文件的module_list中增加launcher_OS模塊編譯。
{
"subsystem": "applications",
"parts": {
"prebuilt_hap": {
...
"module_list": [
...
"http://applications/standard/launcher:launcher_OS",
...
]
}
}
}
執(zhí)行源碼編譯指令。如果以下2個目錄產(chǎn)物正確,則說明應(yīng)用源碼編譯方式修改成功。
在out/rk3568/obj/applications/standard/launcher/launcher_OS目錄中,會生成2個hap的編譯產(chǎn)物。
在out/rk3568/packages/phone/system/app/com.ohos.launcher目錄中,是實(shí)際系統(tǒng)環(huán)境中的hap包產(chǎn)物。
燒錄系統(tǒng)驗(yàn)證功能。
Launcher正常啟動:
系統(tǒng)應(yīng)用目錄文件正確: