首先通过可视化终端(windTerm/xshell等)连接上192.168.1.10服务器
1.初始化仓库:
mkdir ~/openharmony_5.1.0 && cd ~/openharmony_5.1.0
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-5.1.0-Release --no-repo-verify
2.同步代码:
repo sync -c -j8
3.下载预编译工具链
bash build/prebuilts_download.sh --skip-ssl
注意:执行完预编译脚本以后,有可能出现编译工具下载和配置不完整,一般是因为网络环境或安全空间的部分限制原因,可以参考上一篇文档解决
编辑 - OpenHarmony源码下载与编译 | 知识库管理
4.正式编译源码
执行dockerinfo指令,进入到docker沙箱环境,进入common容器
标准系统编译:
./build.sh --product-name rk3568 --ccache --load-test-config=false --no-prebuilt-sdk
首次编译会耗时较长,一般会持续1.5-3h,编译成功后,可视化终端会输出以下内容:
接下来就可以正式进入烧录阶段
此外,还可以利用开发工具DevEco DeviceTool进行一键编译,具体可参考官方文档:
device.harmonyos.com/cn/docs/doc…
编译RK3568开发板源码-基于第三方芯片的开发板-编译运行-HUAWEI DevEco Device Tool使用指南-OpenHarmony设备开发-HarmonyOS设备开发
5.镜像(固件)烧录
①将openharmony_5.1.0/out/rk3568/packages/phone/images目录下的镜像文件全部烧录到rk3568开发板
②镜像压缩后,服务器上传固件,运行类似以下命令,然后下载到本地
uploadx_GZ.sh 文件夹 用户名
例如:uploadx_GZ.sh HJ_012_XMA311D2AV2-1_A311D2_8192M_128G_USBUART_Eshare_W6_NOV_20230617005454 zhangsan
uploadx_GZ.sh images.zip xxxx
③使用rktool烧录:
DriverAssistant和rkTool工具:
RKDevTool_v3.13_for_window.zip
1.打开rktools以后,右键导入配置(选中config文件)
2.修改镜像分区文件所在文件路径(存放于U盘下的对应镜像文件)
3.这里通过USB3.0连接主板和pc,断电上电同时按住复位键(3)后,发现loader设备以后,点击“执行”开始烧写
4.烧录成功后,设备会正常重启,看到开机动画,则说明执行成功:
6.系统应用卸载:
方式一:
①通过hdc tconn 192.168.11.222:6780连接上设备;
②执行hdc target mount ,赋予读写权限;
③执行hdc shell进入shell模式下,进入目标应用所在目录/system/app
④执行rm -rf com.ohos.xxx 删除应用hap包;
⑤执行reboot重启,卸载系统应用生效;
方式二:
更为彻底和正确的方式是
1.通过源码删除相关hap包以及相关gn配置后,重新打包编译:
要确保编译后的镜像不包含 Tk-Media.hap 应用,仅删除源码中的 .hap 文件是不够的,还需从构建配置、产品定义等环节彻底移除依赖。
①删除源码中的 Tk-Media.hap 文件 先执行删除操作: bash rm -f ~/oh5_ms/applications/standard/hap/Tk-Media.hap
注意:建议提前备份相关重要文件,并清楚地了解每一步操作所产生的结果;
②检查并修改构建配置文件(BUILD.gn) 系统应用的编译通常由 BUILD.gn 管理依赖,需确保构建系统不再尝试引用该应用: 1. 进入 applications/standard/hap 目录,编辑 BUILD.gn 文件; 2. 在 BUILD.gn 中找到对 Tk-Media.hap 的目标声明或依赖配置 (例如 ohos_prebuilt_hap 或 group 中的引用),将其删除。 示例(假设原配置): gn ohos_prebuilt_hap("Tk-Media") { source = "Tk-Media.hap" # 其他配置... } 删除整个该目标的声明块。
③检查 产品配置文件 若该应用在某产品的“必选应用列表”中,需从产品配置中移除: 1. 进入产品定义目录(如 productdefine/common/products/),找到对应产品的配置文件(如 rk3568.json)。 2. 打开文件,在 apps 或 system_apps 节点中,删除 com.ohos.tk.media 对应的条目。
如果不存在,则跳过
④清理编译缓存并重新编译 旧的编译缓存可能残留该应用的产物,需彻底清理: 进入源码根目录后, 清理out目录:rm -rf out,并清除缓存:ccache -C,然后重新执行编译命令(示例,按实际编译参数调整) ./build.sh --product-name gk6780v100 --ccache --load-test-config=false --patch
⑤关键说明 - 构建配置是核心 :如果仅删除 .hap 文件但 BUILD.gn 仍引用该目标,编译时会报“文件缺失”错误; - 产品配置需同步:若产品配置强制包含该应用,即使源码移除,编译后仍会被打包进镜像; - 缓存清理要彻底:确保 out 目录的旧产物被完全删除,避免新编译时复用旧文件。
这里有个插曲:
①删除hap包并删除BUILD.gn文件当中相关配置以后,清除缓存重新编译发现报错:
②经过检索发现是因为:
在构建过程中出现了补丁冲突导致的构建失败,于是检索并打开这个冲突文件:
③冲突文件内容清晰地说明了补丁文件的意图是将标准化系统下的libsub_stub版本由1.2升级为2.0
④于是检查当前目录下的BUILD.gn文件,发现实际上版本已经升级到了2.0版本:
⑤于是删除冲突文件后,清理缓存,重新编译
rm -rf out
ccache -C
⑥解决冲突后仍然报错,可以添加编译参数:--no-patch 暂时绕开这个问题,以快速验证当前修改;
./build.sh --product-name gk6780v100 --ccache --load-test-config=false --patch --no-patch
补充:
在基于 OpenHarmony 5.1.0-Release 版本编译源码时,要彻底移除一个应用(HAP包),仅仅删除 HAP 文件是远远不够的。因为这个应用很可能已经在构建系统的配置文件中被声明和引用,如果不清除这些依赖关系,会导致编译失败。
以下是详细的分析和操作步骤:
一、为什么不能只删除 HAP 包?
OpenHarmony 的构建系统(GN + Ninja)通过一系列 .gn 和 BUILD.gn 文件来管理项目依赖和编译流程。一个应用(HAP)通常会在以下地方被引用:
BUILD.gn文件:定义了如何编译该 HAP。bundle.json或module.json5文件:应用的配置清单。- 父级或模块级的
BUILD.gn:将该 HAP 作为依赖项添加到更大的目标(如system_app或product_bundle)中。 config.json或产品配置文件:在特定产品(如default)的配置中启用了该应用。
如果不移除这些引用,构建系统在尝试“链接”或“打包”时会找不到对应的输出,从而报错。
二、需要修改的文件列表
要彻底移除一个 HAP 应用,需要检查并可能修改以下类型的文件:
| 文件类型 | 路径示例 | 作用 |
|---|---|---|
应用自身的 BUILD.gn | ``` | |
| applications/standard/hap/YourApp/BUILD.gn |
| **应用目录下的** **`module.json5`** | ```
applications/standard/hap/YourApp/module.json5
``` | 应用的模块配置,可以一并删除。 |
| **上级** **`BUILD.gn`** | ```
applications/standard/hap/BUILD.gn
``` | 将所有标准应用聚合在一起,需要移除对该 HAP 的依赖。 |
| **系统应用配置** | ```
build/subsystems_config/system_app.json
``` | 列出了所有预装的系统应用,必须移除。 |
| **产品配置文件** | `productdefine/common/inherit/base.json` 或 `productdefine/common/products/your_product.json` | 定义了特定产品包含哪些软件包,需检查并移除。 |
* * *
### **三、详细操作步骤**
#### **步骤 1:定位目标 HAP 应用**
确定要删除的应用名称和完整路径。例如,我们要删除 `Calculator` 应用:
applications/standard/hap/Calculator/
#### **步骤 2:删除应用源码目录**
直接删除整个应用目录:
rm -rf applications/standard/hap/Calculator/
#### **步骤 3:修改上级** **`BUILD.gn`** **文件**
找到上级聚合的 `BUILD.gn` 文件,通常是:
applications/standard/hap/BUILD.gn
打开此文件,查找类似如下代码块:
ohos_sources("standard_hap") { deps = [ ":Settings", ":Calculator", # 找到这一行 ":FileManager", # ... ] }
**将** **`":Calculator"`** **这一行从** **`deps`** **列表中删除**。
#### **步骤 4:修改系统应用配置文件**
打开系统应用配置文件:
build/subsystems_config/system_app.json
这是一个 JSON 文件,内容类似于:
{ "system_app": [ "Settings", "Calculator", // 找到这一行 "FileManager" ] }
**将** **`"Calculator"`** **从数组中移除**。
#### **步骤 5:检查产品配置文件**
根据您编译的产品(如 `default`, `phone`),检查对应的产品配置文件。
路径通常为:
productdefine/common/products/default.json
查找 `"software" -> "packages"` 字段,确保其中不包含 `Calculator`。
#### **步骤 6:清理并重新编译**
执行完整的清理和编译流程:
清理
hb clean
强制重新生成构建配置
hb build -f
* * *
### **四、验证是否成功**
1. **编译成功**:如果上述步骤都正确,编译过程应该不再报错。
1. **镜像中无该应用**:编译完成后,烧录镜像到设备,确认主屏幕或应用列表中已没有该应用。
1. **检查** **`out`** **目录**:在 `out/your_product/packages/phone/` 目录下,检查 `system/app/` 或 `vendor/app/` 中是否还有 `Calculator.hap`。
* * *
### **五、注意事项**
- **备份**:在进行大规模删除前,建议备份原始源码。
- **依赖关系**:某些应用可能是其他功能的依赖(如设置应用中的某个子页面)。删除前请评估影响。
- **动态加载**:极少数应用可能通过动态加载方式引入,这种情况较为复杂,但大多数预装应用都是静态配置的。
* * *
### **总结**
要彻底删除一个 HAP 应用,必须遵循“**物理删除 + 配置清除**”的原则。核心是修改 `applications/standard/hap/BUILD.gn` 和 `build/subsystems_config/system_app.json` 这两个关键文件。完成这些修改后,您的源码编译出的系统将不再包含该应用。