验证模块功能时能否不全量编译代码
背景
答案是肯定的!
众所周知,当前 OpenHarmony 模块十分庞大,非计算云全量编译代码十分耗时。如果修改、验证单一模块是没有必要全量编译的。注意镜像必须和本地代码日期尽量一致,代码可以稍晚于镜像。核心方法就是从每日构建下载烧录镜像,本地编译单一模块,烧录镜像,推送单一模块进行验证。以下以 RK3568 开发板,主线代码为例进行说明。
一、单模块编译准备
1. 拉取全量代码
即使编译单一模块建议要拉取全量代码
2. 从每日构建下载和本地代码日期一致的镜像
OpenHarmony 每日构建链接: http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist
3. 编译单一模块命令构成原理
1). 编译子系统命令构成
2). 子系统生成目录
3). 单元测试 bin 生成目录
4. 常见问题
1). 编译目标库名,编译时不认识,要求修改为 BUILD.gn 中的库名
出错信息
编译命令
./build.sh --product-name rk3568 --build-target libvibrator_decoder
编译输出
说明: 不含.z.so
2). 编译目标库名,编译时不认识,要求修改为 BUILD.gn 中的库名
出错信息
编译命令
./build.sh --product-name rk3568 --build-target deviceagent
编译输出
二、实践步骤
1. 编译 miscdevice 组件
定位组件名称
① 子系统代码目录
② 子系统配置信息
③ name 为组件名称,subsystem 为子系统名称
编译命令
./build.sh --product-name rk3568 --build-target miscdevice
编译输出
④ 组件编译指令
⑤ 组件 so 生成目录,sensors 为子系统名称,miscdevice 为组件名称如上所述
2. 修改了 devicestatus_agent.cpp 文件,编译所在 so
定位所在库名
① 目标源文件
② 距离目标文件最近的 BUILD.gn
③ BUILD.gn 中定义的目标产物,生成的 so 库名,不包括开始的’lib’和末尾的’.z.so’
④ 所在子系统\所在的组件
编译命令
./build.sh --product-name rk3568 --build-target deviceagent
说明:命令末尾添加上 --fast-rebuild, 除过首次,之后编译速度会大大加快!
编译输出
2. 编译对应模块 UT
运行 UT 会在单元测试文档进行详细说明。
定位所在 bin 名称
① 目标源文件
② 距离目标文件最近的 BUILD.gn
③ BUILD.gn 中定义的目标产物,生成的 bin
④ 生成物 bin 的输出目录,如后面图片所示
编译命令
绝对路径
./build.sh --product-name rk3568 --build-target base/msdp/device_status/frameworks/native/interaction/test/unittest:InteractionManagerTest
相对路径
./build.sh --product-name rk3568 --build-target InteractionManagerTest
说明:命令末尾添加上 --fast-rebuild, 除过首次,之后编译速度会大大加快!
编译输出
① 单独编译一个 bin 的指令
② 关于单元测试 bin 输出的默认目录
③ 所在组件名称
3. 烧录镜像
RK3568 烧录镜像参照链接: https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2143
一般仅仅烧录一次,除非更换镜像。
4. 推送模块 so 等
关于 InteractionManagerTest 等测试 bin 文件和 HAP 的推送、执行会在我的其他文档中进行说明,以下以 so 的推送为例进行说明。
步骤 1,确定修改的 so, bin, hap 所在运行系统的目录
例如:替换这个文件 libinteraction_drag.z.so,按如下方法查找
>hdc shell
# ls
bin config eng_system lost+found storage tmp
chip_ckm data etc mnt sys updater
chip_prod dev init module_update sys_prod vendor
chipset eng_chipset lib proc system
find ./lib/ ./system/lib/ -name "libinteraction_drag.z.so"
./lib/libinteraction_drag.z.so
./system/lib/libinteraction_drag.z.so
步骤 2,推送这些被修改的文件
细分为 “挂载”,“推送”
hdc shell mount -o rw,remount /
hdc file send Z:\code_t62_0322\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./system/lib/
hdc file send Z:\code_t62_0322\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./lib/
步骤 3,重启板卡
按键 reset,或者执行 hdc shell reboot
以上步骤 2-3 完整脚本
hdc shell mount -o rw,remount /
hdc file send Z:\code\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./system/lib/
hdc file send Z:\code\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./lib/
hdc shell power-shell setmode 602
pause
hdc shell reboot
步骤 4,更新完成,开始验证
始终亮屏设置 hdc shell power-shell setmode 602
总是有很多小伙伴反馈说:OpenHarmony开发不知道学习哪些技术?不知道需要重点掌握哪些OpenHarmony开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙全栈开发学习路线与学习文档给大家用来跟着学习。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植……等)技术知识点。
OpenHarmony 开发环境搭建:https://gitcode.com/HarmonyOS_MN/733GH/overview
《OpenHarmony源码解析》
搭建开发环境
系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……