OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release) 原创
概述
文档环境
开发环境:Windows 11
编译环境:Ubuntu 20.04
系统分支:OpenHarmony-5.0.0-Release
(本文源码拉取时间:2024-12-07)
开发板型号:DAYU 200(RK3568)
系统版本号:OpenHarmony 5.0.0.71
涉及仓库:
功能简介
- 在OpenHarmony系统中预安装应用的Hap包会随系统编译打包到镜像中,目前有两种编译预安装应用Hap包的方式,一种为随系统编译时,编译应用源码生成Hap包的方式,另一种是将已生成的Hap包放入系统源码中,再进行打包的方式。后者需要开发者使用DevEco Studio或其它途径,把应用源码编译构建为Hap包,再将Hap放入系统源码中。
- 本文档以系统应用Launcher为例,带大家了解如何通过系统源码编译应用的方式来打包预安装应用。
- 历史版本系统编译Hap指南:
OpenHarmony应用编译 - 如何在源码中编译复杂应用(3.2-Release)
OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)
5.0.0-Release系统编译Launcher
1. 由于Launcherg工程自身原因,导致需要做两处改动才可进行源码编译构建。本步骤并非所有项目通用,如果新建的项目可以跳过本步骤。
(1)修改工程级别build-profile.json5文件,适配正确的SDK版本。
文件位置:applications/standard/launcher/build-profile.json5
内容如下:
{
"app": {
"products": [
{
"name": "default",
"signingConfig": "default",
"compileSdkVersion": 12,
"compatibleSdkVersion":12,
"runtimeOS": "OpenHarmony"
}
],
···
},
···
}
(2)由于系统编译应用目前不支持配置产品,所以需要把Launcher应用源码中有关PAD的构建项删除。
文件位置:applications/standard/launcher/build-profile.json5
内容如下:
{
···
{
"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
内容如下:
{
"apiType": 'stageMode',
"buildOption": {
},
"targets": [
{
"name": "default",
}
],
"entryModules": ["phone_launcher"]
}
2. 删除或注释系统中默认的Launcher应用HAP包编译方式。
文件位置:applications/standard/hap/BUILD.gn
group("hap") {
deps = [
···
# "//applications/standard/hap:launcher_hap", // 直接删除或注释,不参与编译
# "//applications/standard/hap:launcher_settings_hap", // 直接删除或注释,不参与编译
···
]
}
3. 在applications/standard/launcher目录中增加BUILD.gn文件。
内容如下:
import("//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"
}
说明:
- 此处产物名称hap_name定义为Launcher_OS是为了区分原系统源码中默认的HAP包名称,实际可以填写为Launcher或任意值。
- BUILD.gn的模板参数可以参考编译系统提供的模板。
4. 在applications/standard/hap/ohos.build文件的module_list中增加launcher_OS模块编译。
{
"subsystem": "applications",
"parts": {
"prebuilt_hap": {
···
"module_list": [
···
"//applications/standard/launcher:launcher_OS",
...
]
}
}
}
5. 执行源码编译指令。如果以下2个目录产物正确,则说明应用源码编译方式修改成功。
(1)在out/rk3568/obj/applications/standard/launcher/launcher_OS目录中,会生成2个HAP的编译产物。
(2)在out/rk3568/packages/phone/system/app/com.ohos.launcher目录中,是实际系统环境中的Hap包产物。
6. 烧录系统验证功能。
Launcher正常启动:
系统应用目录文件正确: