当前位置: 首页 > news >正文

OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)

往期知识点记录:

  • 鸿蒙(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平台的可执行文件,步骤如下:

  1. 设置工具链 将下列clang工具链配置替换掉yxml库根目录的Makefile(即表1中的文件)中的原有配置。

clang工具链配置:

    #设置交叉编译工具链,确保工具链所在路径已经添加到了PATH环境变量中CC:=clangAR:=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:=gccAR:=arCFLAGS:=-Wall -Wextra -Wno-unused-parameter -O2 -g
  1. 执行编译 linux命令行中进入yxml的源文件目录(即图1所示目录),执行下列命令:
    make test OHOS_SYSROOT_PATH=...

其中OHOS_SYSROOT_PATH需用绝对路径指定出sysroot所在目录,以OpenHarmony为例即源码根目录下out/hispark_xxx/ipcamera_hispark_xxx/sysroot目录的绝对路径。上述目录会在全量编译后生成,因此移植前先完成一次全量编译。

  1. 查看结果 步骤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; dob=`basename $i .xml`o=${b}.outt=${b}.test./test <$i >$tif [ -n "`diff -q $o $t`" ]; thenecho "Test failed for $i:"diff -u $o $texit 1fi
done
echo "All tests completed successfully."

由于OpenHarmony的shell中暂不支持输入输出重定向(<和>),所以测试时需要将输入*.xml文件内容直接复制进shell后回车,输出内容会直接展示在shell窗口。过程如下:

下列操作假定已按照2.4节的步骤搭建OpenHarmony,挂载并进入nfs目录:

  1. 执行下列命令

    ./test
  2. 复制*.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>
  1. 比较shell中输出的内容与表3test目录中对应的*.out文件是否一致 输出结果如下:
    pistart SomePIpicontent abcpiendelemstart aelemendok

经比较与表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.pyGN调用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

图片
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Git的学习笔记
  • 道可云人工智能元宇宙每日资讯|2024互联网岳麓峰会在长沙召开
  • HTML+CSS - 网页布局之网格布局
  • MySQL从入门到精通——实战45例
  • 压力测试(内存、磁盘、网络、cpu)
  • SAP学习笔记 - 开发04 - Fiori UI5 开发环境搭建
  • Git 使用教程:从入门到精通
  • Vue3 动态组件
  • 常见的站长工具接口有哪些?站长们该如何选择?
  • Echarts中文版 2D世界地图
  • Leetcode 寻找重复数
  • Vue3: setup语法糖
  • B2C电商接口解决方案||搭建电商项目必备电商接口
  • Redis中的AOF重写过程及其实际应用
  • Linux echo,printf 命令
  • [LeetCode] Wiggle Sort
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • vagrant 添加本地 box 安装 laravel homestead
  • windows-nginx-https-本地配置
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 警报:线上事故之CountDownLatch的威力
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端设计模式
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #git 撤消对文件的更改
  • #控制台大学课堂点名问题_课堂随机点名
  • (13)DroneCAN 适配器节点(一)
  • (5)STL算法之复制
  • (day18) leetcode 204.计数质数
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (含笔试题)深度解析数据在内存中的存储
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (新)网络工程师考点串讲与真题详解
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • (自适应手机端)行业协会机构网站模板
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core中的去虚
  • .Net 高效开发之不可错过的实用工具
  • .Net8 Blazor 尝鲜
  • .net开发日常笔记(持续更新)
  • /var/lib/dpkg/lock 锁定问题
  • @Repository 注解
  • [20150629]简单的加密连接.txt
  • [5] CUDA线程调用与存储器架构
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [cb]UIGrid+UIStretch的自适应
  • [CLickhouse] 学习小计