往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
 - 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
 - OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一)
 - OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)
 - OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(三)
 - OpenHarmony(鸿蒙南向开发)——轻量系统芯片内核移植
 - OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)
 - OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
 - OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(三)
 - OpenHarmony(鸿蒙南向开发)——标准系统移植指南(一)
 - OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核
 - OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(一)
 - OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)
 - 持续更新中……
 
Makefile方式组织编译的库移植
以yxml库为例,其移植过程如下文所示。
源码获取
从仓库获取yxml源码,其目录结构如下表:
表1 源码目录结构
| 名称 | 描述 | 
|---|---|
| yxml/bench/ | benchmark相关代码 | 
| yxml/test/ | 测试输入输出文件,及测试脚本 | 
| yxml/Makefile | 编译组织文件 | 
| yxml/.gitattributes | - | 
| yxml/.gitignore | - | 
| yxml/COPYING | - | 
| yxml/yxml.c | - | 
| yxml/yxml.c.in | - | 
| yxml/yxml-gen.pl | - | 
| yxml/yxml.h | - | 
| yxml/yxml.md | - | 
| yxml/yxml-states | - | 
设置交叉编译
设置Makefile的交叉编译工具链,修改并编译该库,生成OpenHarmony平台的可执行文件,步骤如下:
- 设置工具链 将下列clang工具链配置替换掉yxml库根目录的Makefile(即表1中的文件)中的原有配置。
 
clang工具链配置:
    #设置交叉编译工具链,确保工具链所在路径已经添加到了PATH环境变量中
    CC:=clang
    AR:=llvm-ar
    #cflags中必须要添加--target及--sysroot选项
    CFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g --target=arm-liteos -march=armv7-a -mfloat-abi=softfp -mcpu=cortex-a7 -mfpu=neon-vfpv4 --sysroot=$(OHOS_SYSROOT_PATH)
 
原有配置:
    CC:=gcc
    AR:=ar
    CFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g
 
- 执行编译 linux命令行中进入yxml的源文件目录(即图1所示目录),执行下列命令:
 
    make test OHOS_SYSROOT_PATH=...
 
其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot所在目录,以OpenHarmony为例即源码根目录下out/hispark_xxx/ipcamera_hispark_xxx/sysroot目录的绝对路径。上述目录会在全量编译后生成,因此移植前先完成一次全量编译。
- 查看结果 步骤2操作完成后,yxml下会生成out目录,里面有静态库文件和测试用例:
 
表2 yxml编译生成目录
| 名称 | 描述 | 
|---|---|
| OpenHarmony/third_party/yxml/yxml/out/lib/ | 编译生成的静态库的存放目录 | 
| OpenHarmony/third_party/yxml/yxml/out/test/ | 编译生成的测试用例及其输入输出等文件的存放目录 | 
测试
yxml库测试步骤与double-conversion库基本一致,可参考CMake方式组织编译的库移植的测试过程,以下内容介绍yxml库测试用例的使用方法:
表3 生成的test目录结构示意
| 名称 | 描述 | 
|---|---|
| OpenHarmony/third_party/yxml/yxml/out/test/test.sh | 自动化测试脚本,由于OpenHarmony不支持脚本运行,因此无法使用,可参考其内容手动测试 | 
| OpenHarmony/third_party/yxml/yxml/out/test/test | 用于测试的可执行文件 | 
| OpenHarmony/third_party/yxml/yxml/out/test/*.xml | 测试输入文件 | 
| OpenHarmony/third_party/yxml/yxml/out/test/*.out | 期望的输出文件 | 
test.sh内容如下所示:
#!/bin/sh
for i in *.xml; do
  b=`basename $i .xml`
  o=${b}.out
  t=${b}.test
  ./test <$i >$t
  if [ -n "`diff -q $o $t`" ]; then
    echo "Test failed for $i:"
    diff -u $o $t
    exit 1
  fi
done
echo "All tests completed successfully."
 
由于OpenHarmony的shell中暂不支持输入输出重定向(<和>),所以测试时需要将输入*.xml文件内容直接复制进shell后回车,输出内容会直接展示在shell窗口。过程如下:
下列操作假定已按照2.4节的步骤搭建OpenHarmony,挂载并进入nfs目录:
-  
执行下列命令
./test -  
复制*.xml内容到shell 以表3test目录下pi01.xml为例,内容如下,输入到shell并回车:
 
    <?SomePI abc?><a/>
 
<textarea id="copy1722498774660" style="color: inherit; font: inherit; position: absolute; top: -9999px; left: -9999px; z-index: -9999;"></textarea>
 
- 比较shell中输出的内容与表3test目录中对应的*.out文件是否一致 输出结果如下:
 
    pistart SomePI
    picontent abc
    piend
    elemstart a
    elemend
    ok
 
经比较与表3test目录下pi01.out内容一致,测试通过。
将该库编译添加到OpenHarmony工程中
yxml库添加的过程除了适配文件build.gn和config.gni有些许变化外,其他和double-conversion库完全一致,参考CMake方式组织编译的库移植的配置过程。要修改的适配文件及添加后的目录结构如下:
- yxml库新增的BUILD.gn实现如下:
 
import("config.gni")
group("yxml") {
    if (ohos_build_thirdparty_migrated_from_fuchisa == true) {
        deps = [":make"]
    }
}
if (ohos_build_thirdparty_migrated_from_fuchisa == true) {
    action("make") {
        script = "//third_party/yxml/build_thirdparty.py"
        outputs = ["$target_out_dir/log_yxml.txt"]
        exec_path = rebase_path(rebase_path("./yxml", root_build_dir))
        command = "make clean && $MAKE_COMMAND"
        args = [
            "--path=$exec_path",
            "--command=${command}"
        ]
    }
}
 
- yxml库新增的config.gni配置如下:
 
TEST_ENABLE = "YES"
if (TEST_ENABLE == "YES") {
    MAKE_COMMAND = "make test OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
} else {
    MAKE_COMMAND = "make OHOS_SYSROOT_PATH=${root_out_dir}sysroot/"
}
 
-  
添加完成后目录结构示意:
表4 添加到工程后的目录结构
 
| 名称 | 描述 | 
|---|---|
| OpenHarmony/third_party/yxml/BUILD.gn | 将三方库加入工程的gn适配文件 | 
| OpenHarmony/third_party/yxml/build_thirdparty.py | GN调用shell命令脚本文件,由上面GN文件将相关命令传入,实现GN转Makefile | 
| OpenHarmony/third_party/yxml/config.gni | 三方库编译配置文件,可修改该文件来配置用例是否参与构建等 | 
| OpenHarmony/third_party/yxml/yxml/ | 要移植的三方库目录 | 
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview
 
如何快速入门?
1.基本概念
 2.构建第一个ArkTS应用
 3.……

开发基础知识:
1.应用基础知识
 2.配置文件
 3.应用数据管理
 4.应用安全管理
 5.应用隐私保护
 6.三方应用调用管控机制
 7.资源分类与访问
 8.学习ArkTS语言
 9.……

基于ArkTS 开发
1.Ability开发
 2.UI开发
 3.公共事件与通知
 4.窗口管理
 5.媒体
 6.安全
 7.网络与链接
 8.电话服务
 9.数据管理
 10.后台任务(Background Task)管理
 11.设备管理
 12.设备使用信息统计
 13.DFX
 14.国际化开发
 15.折叠屏系列
 16.……

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview
 

OpenHarmony 开发环境搭建

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview
 
- 搭建开发环境
 - Windows 开发环境的搭建
 - Ubuntu 开发环境搭建
 - Linux 与 Windows 之间的文件共享
 - ……
 - 系统架构分析
 - 构建子系统
 - 启动流程
 - 子系统
 - 分布式任务调度子系统
 - 分布式通信子系统
 - 驱动子系统
 - ……
 

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview
 

 










