想了解更多關于開源的內容,請訪問:
本站開源基礎軟件社區
概述
文檔環境
- 開發環境:Windows 11
- 編譯環境:Ubuntu 22.04
- 開發板型號:DAYU 200(RK3568)
- 系統版本:OpenHarmony-3.2-Release
- 涉及倉庫:applications_launcher
功能簡介
- 在OpenHarmony系統中預安裝應用的hap包會隨系統編譯打包到鏡像中,目前有兩種編譯預安裝應用hap包的方式,一種為隨系統編譯時,編譯應用源碼生成hap包的方式,另一種是將已生成的hap包放入系統源碼中,再進行打包的方式。后者需要開發者使用DevEco Studio或其它途徑,把應用源碼編譯構建為hap包,再將hap放入系統源碼中。
- 本文檔以系統應用Launcher為例,帶大家了解如何通過系統源碼編譯應用的方式來打包預安裝應用。
3.2-Release系統編譯Launcher
刪除或注釋系統中默認的Launcher應用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/product/phone目錄中增加BUILD.gn文件。
內容如下:
import("http://build/ohos.gni")
ohos_hap("launcher_hap") {
hap_profile = "src/main/module.json"
deps = [
":launcher_js_assets",
":launcher_resources",
]
certificate_profile = "../../signature/launcher.p7b"
hap_name = "Launcher_OS"
part_name = "prebuilt_hap"
subsystem_name = "applications"
js_build_mode = "release"
module_install_dir = "app/com.ohos.launcher"
}
ohos_js_assets("launcher_js_assets") {
ets2abc = true
source_dir = "src/main/ets"
}
ohos_resources("launcher_resources") {
sources = [ "src/main/resources", "../../common/src/main/resources" ]
deps = [ ":launcher_app_profile" ]
hap_profile = "src/main/module.json"
}
ohos_app_scope("launcher_app_profile") {
app_profile = "../../AppScope/app.json"
sources = [ "../../AppScope/resources" ]
}
說明:
- 此處把產物名稱hap_name定義為Launcher_OS是為了區分原系統源碼中默認的hap包名稱,實際可以填寫為Launcher。
- 因為launcher_hap中使用了其它har(common)中的資源,所以launcher_resources中的sources需要添加依賴的resources資源目錄,在步驟3中launcher_settings_hap
中的配置也是如此。
在applications/standard/launcher/feature/settings目錄中增加BUILD.gn文件。
內容如下:
import("http://build/ohos.gni")
ohos_hap("launcher_settings_hap") {
hap_profile = "src/main/module.json"
deps = [
":launcher_settings_js_assets",
":launcher_settings_resources",
]
certificate_profile = "../../signature/launcher.p7b"
hap_name = "Launcher_Settings_OS"
part_name = "prebuilt_hap"
subsystem_name = "applications"
js_build_mode = "release"
module_install_dir = "app/com.ohos.launcher"
}
ohos_js_assets("launcher_settings_js_assets") {
ets2abc = true
source_dir = "src/main/ets"
}
ohos_resources("launcher_settings_resources") {
sources = [ "src/main/resources", "../../common/src/main/resources" ]
deps = [ ":launcher_settings_app_profile" ]
hap_profile = "src/main/module.json"
}
ohos_app_scope("launcher_settings_app_profile") {
app_profile = "../../AppScope/app.json"
sources = [ "../../AppScope/resources" ]
}
說明:
- 此處把產物名稱hap_name定義為Launcher_Settings_OS是為了區分原系統源碼中默認的hap包名稱,實際可以填寫為Launcher_Settings。
因為系統編譯只可讀取json后綴的配置文件,所以需要把應用源碼中的app.json5和module.json5文件復制,并改名為app.json和module.json文件。
復制applications/standard/launcher/AppScope/app.json5文件為app.json。
復制applications/standard/launcher/product/phone/src/main/module.json5文件為module.json。
復制applications/standard/launcher/feature/settings/src/main/module.json5文件為module.json。
在applications/standard/hap/ohos.build文件module_list中增加launcher_hap模塊和launcher_settings_hap模塊編譯。
{
"subsystem": "applications",
"parts": {
"prebuilt_hap": {
...
"module_list": [
...
"http://applications/standard/launcher/product/phone:launcher_hap",
"http://applications/standard/launcher/feature/settings:launcher_settings_hap",
...
]
}
}
}
修改預編譯配置build/prebuilts_download_config.json文件,把launcher依賴增加到npm_install_path列表中。
{
"prebuilts_download_dir": "../OpenHarmony_canary_prebuilts",
"npm_install_path": [
"developtools/ace_ets2bundle/compiler",
"developtools/ace_js2bundle/ace-loader",
"third_party/jsframework",
"arkcompiler/ets_frontend/ts2panda",
"arkcompiler/ets_frontend/legacy_bin/api8",
"interface/sdk-js/build-tools",
"applications/standard/launcher/common",
"applications/standard/launcher/feature/appcenter",
"applications/standard/launcher/feature/bigfolder",
"applications/standard/launcher/feature/form",
"applications/standard/launcher/feature/gesturenavigation",
"applications/standard/launcher/feature/numbadge",
"applications/standard/launcher/feature/pagedesktop",
"applications/standard/launcher/feature/recents",
"applications/standard/launcher/feature/smartdock",
"applications/standard/launcher/feature/settings",
"applications/standard/launcher/product/phone"
],
...
}
執行預編譯指令。
bash build/prebuilts_download.sh --skip-ssl
可以在應用源碼中看到應用內的依賴已經被正確的加載。
執行源碼編譯指令。如果以下2個目錄產物正確,則說明應用源碼編譯方式修改成功。
在out/rk3568/obj/applications/standard/launcher目錄中,會生成2個hap的編譯產物。
在out/rk3568/packages/phone/system/app/com.ohos.launcher目錄中,是實際系統環境中的hap包產物。
燒錄系統驗證功能。
Launcher正常啟動:
系統應用目錄文件正確:
想了解更多關于開源的內容,請訪問:
本站開源基礎軟件社區