惊落一身雪 发表于 2025-1-25 19:22:45

【鸿蒙】跨平台三方框架(一)-迁移三方库到鸿蒙(还差源码未调试完,调试

在学习这篇文章之前,大家首先要明白几件事情
问:为什么要迁移三方库,目地意义在哪?
答:不知道大家是否相识NDK或者napi框架,如果相识就很好理解,如果不相识咱们换一个方向表明,我们在前端做一个界面,在这个界面里肯定会涉及到组件结构调用接口等,那假设咱们公司要去做短信验证的这个功能,是不是需要有个接二维码的服务,但由于团队职员不够也不想费更多的人力投入这件事中,咱们需要外部引入部门接口去调用。或者如果我们要去做金融的借贷平台,但是不知道能否借给这个人款,他的信用怎么样,我们就要对接银行的API,往复查询这个人的信用状况。再比如我们要实现一个播放视频的功能,已经创建了窗口可以播放视频,但是音频有问题,咱们就可以编译三方库调用三方库的接口,来利用我们所需要的内部逻辑。
问:为什么要执行交织编译?
答:在嵌入式开发中,交织编译开源软件是一个常见的任务,它涉及到将源代码编译成能够在目标嵌入式平台上运行的二进制文件。由于嵌入式平台的硬件架构和操纵体系可能与开发呆板差别,因此需要利用交织编译工具链来完成这一任务。


上述已经说了为什么迁移三方库,下面就开始进入流程,手把手教大家怎样编译怎样迁移:
一、移植思路

1、通过修改工具链,交织编译该三方库,天生OpenHarmony平台的可执行文件,末了再通过GN调用CMake的方式添加到OpenHarmony工程中。
必备知识点:linux、shell脚本、交织编译链、cmake、Makefile、Configure、ninja、gn等
额外知识点:native、napi
二、三方库交织编译框架及迁移三方库流程图

- 三方库交织编译框架

https://i-blog.csdnimg.cn/direct/93db783636994e47b442d2bcf2470637.png
- 迁移三方库流程图

https://i-blog.csdnimg.cn/direct/a0727d9eb4e5422681d625606a805f9c.png
三、逐步分析流程图

- 编译前:

涉及的环境工具

Ubuntu、MobaXterm_Personal(或者xshell)、vscode、Git/TortoiseGit、Beyond Compare
环境工具相识及扩展



[*] MobaXterm_Personal:是一款强大的远程连接软件,它提供了便捷的方式进行Unix/Linux体系的SSH连接,无需假造机。通过获取服务器IP地址并用MobaXterm建立SSH链接,即可在当地执行Linux下令;
https://i-blog.csdnimg.cn/direct/0f69c5173649472490bb915979a8475b.png
https://i-blog.csdnimg.cn/direct/ec450ac096d5410a86c9a1417e20bbac.png
https://i-blog.csdnimg.cn/direct/586c6148c0704e5c8169e7f3480b8670.png
[*] xshell:功能强大的终端仿真软件:SSH、SFTP、TELNET、RLOGIN和SERIAL等多种协议;
[*] https://i-blog.csdnimg.cn/direct/506d08bfcc0f499dbe24a0a562687ed6.png
https://i-blog.csdnimg.cn/direct/1fa02d33fe67462d85bfbdd4a7984435.png
https://i-blog.csdnimg.cn/direct/42cc0b4bd3b84a63951f66ebe120a0b0.png
https://i-blog.csdnimg.cn/direct/53d6b1c1ec1543adb4f0936b4c73affb.png
https://i-blog.csdnimg.cn/direct/65c639efb90247b3a07cff5582db1397.png
[*] ubuntu:以桌面应用为主的开源GNU/Linux操纵体系;
可以直接在应用市肆里下载Ubuntu,如果应用商城下载不了就具体看下面二篇文章:
1、wls下载地址
2、在Win10/Win11或Win Server的WSL上自定义安装Ubuntu-无微软市肆文档

[*] vscode:跨平台、免费且开源的现代轻量级代码编辑器,它支持Windows、macOS和Linux等操纵体系;
https://i-blog.csdnimg.cn/direct/fa3ab084d1ea4d88a6b60b49ea61389f.png
[*] Git/TortoiseGit:Git是一个免费的、开源的分布式版本控制体系,可以高速处置惩罚从小型到大型的各种项目;TortoiseGit是TortoiseSVN的Git版本,是一个在Windows体系下利用的Git版本控制客户端。它提供了图形用户界面,操纵简朴,同时完全兼容Git的下令行操纵
https://i-blog.csdnimg.cn/direct/c4fad6a5b3b5456885dae1688169a4f9.png
具体操纵可以看这个文章:git下令归纳整理及怎样利用;界面化TortoiseGit文章我还没整理,后续会更新
[*] Beyond Compare:利用简朴、功能强大的下令比力文件和文件夹,合并更改、同步文件和天生陈诉;随时随地访问数据:直接访问 FTP 站点;Beyond Compare 包括用于各种数据类型的内置比力查看器。除了文本,另有比力表、图像、二进制文件、注册表配置单位等;
https://i-blog.csdnimg.cn/direct/7b1fe44ac50443aa87f0e652e5d95c2f.png
具体我就不具体写了,偶然间单独出篇文章,Beyond Compare用好了还是蛮好用的,作用很大,可以增加工作效率。
简述步骤

准备环境->下载鸿蒙sdk->配置环境变量
具体步骤

第一步先准备环境:我一样平常在linux上去交织编译,所以我会下Ubuntu 终端,另有MobaXterm_Personal,
- 编译中:

涉及知识点

linux下令、shell脚本、cmake\configure、交织编译链、Makefile
知识点相识及扩展



[*]linux下令:
[*]shell脚本:
[*]cmake\configure:
[*]交织编译链:
[*]Makefile:
简述步骤

一共有四种方法:
1、(用的最多的方法)先相识自己项目依赖什么三方库->在github里/官网中下载三方库源码->设置鸿蒙sdk交织编译链全局变量->打开三方库源码看build脚本及cmake或者configure构建去编译出动态库或者静态库(如有涉及别的依赖库需要写脚本或者手动拉取去编译)->出动态库或者静态库放入Dev中去测
2、(也是用的最多-简朴一点直接利用鸿蒙仓库适配好的) OpenHarmony-SIG/tpc_c_cplusplus这个仓库重要用于存放已经适配OpenHarmony的C/C++三方库的适配脚本和OpenHarmony三方库适配引导文档、三方库适配相关的工具。编译的三方组件在tpc_c_cplusplus仓里去找(路径 tpc_c_cplusplus/ thirdparty )->设置鸿蒙sdk交织编译链全局变量->找到后用 ./build 组件名 编译(需要32位还是64位自行在脚本内删除archs=(“armeabi-v7a” “arm64-v8a”),有相关的也需要进行屏蔽)->出动态库或者静态库放入Dev中去测
3、(有些项目是私有三方库,没有cmake或者configure这些构建方式也不想写重构代码用这个方法)Dev创建c++项目->把私有三方库源码放入Dev中的cpp路径->改写Dev中的CMakeLists(路径:DevEcoStudioProjects\MyApplication5\entry\src\main\cpp\CMakeLists.txt)->Dev编译调试
4、(不建议利用,需要重构代码费时间。原理跟第3种方法很像,但是这类方法只需要挑选出咱们需要调用的逻辑去重构)看私有三方库代码,需要列出三方库的接口及逻辑->鸿蒙一样平常利用napi作为c++底层和js上层的连接,把代码内部逻辑写在Dev项目里,用napi接口调用重构的逻辑->改写Dev中的CMakeLists->Dev编译调试
具体步骤

前期环境搭建



[*]先下载sdk链接:鸿蒙SDK及全部工具下载链接
[*]再下载ubuntu和MobaXterm_Personal:知识点及怎么下载应用,看上面编译前提到的
[*]打开MobaXterm_Personal或者ubuntu解压sdk:
//解压linux的SDK,下面有步骤图示
tar -zxvfversion-Master_Version-OpenHarmony_5.0.0.32_dev-20240715_020215-ohos-sdk-full.tar.gz

unzip /mnt/d/SDK/sdk/linux/ets-linux-x64-5.0.0.33-Canary2.zip
unzip /mnt/d/SDK/sdk/linux/js-linux-x64-5.0.0.33-Canary2.zip
unzip /mnt/d/SDK/sdk/linux/native-linux-x64-5.0.0.33-Canary2.zip
unzip /mnt/d/SDK/sdk/linux/previewer-linux-x64-5.0.0.33-Canary2.zip
unzip /mnt/d/SDK/sdk/linux/toolchains-linux-x64-5.0.0.33-Canary2.zip
https://i-blog.csdnimg.cn/direct/10dcabaa31a842db90759c0583af9467.png
https://i-blog.csdnimg.cn/direct/2fea1e2330d34581b541555ab10272f7.png


[*]配置linux的sdk环境(windows直接利用在Dev里,linux用于交织编译):
windows的sdk配置
https://i-blog.csdnimg.cn/direct/ae2418939f2e46238257a3904be61b97.png
linux解压sdk
//OHOS_SDK是你存linux SDK的路径,我上面图的位置是/mnt/d/SDK/sdk/linux下,这个位置是可以改变的,随你自己存储的位置决定
export OHOS_SDK=/root/workspace/openharmony

//下面的基本每个人交叉编译的设置都是一样的,顶多额外设置一些其他编译链或者链接库
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"
https://i-blog.csdnimg.cn/direct/772d87e3b66c40a197e01f289610ac82.png
5. 额外可能还需要下载一些依赖工具,或者配置阿里源(需要的话可以下拉并配置,链接里有方法):【OpenHarmony】环境安装及代码下拉开发编译操纵总结
步骤里的第一、第二方法一块讲

对比一二方法区别与简述图示

https://i-blog.csdnimg.cn/direct/756e978663064cdebdd3810eb1d8d869.png
1、先相识下自己需要什么三方库或者客户需要什么三方库,比如视频的需要FFmpeg,关于密钥,ssh等需要openssl,人脸需要opencv,关于数据储存和通讯协议的话需要protobuf等等。
2、可以自己交织编译三方库(第一个方法)也可以用鸿蒙仓上的去编译三方库(第二个方法)。


[*]第一个方法:直接下载源码或者下载源码的包去进行三方编译步骤如下,脚本:

echo 'configuring libjson ...'
tar zxvf ${libsources}/libjson_client.tar.gz
cd libjson
mkdir build
cd build
# cmake -DDEFINE_LINUX64=ON -DCMAKE_INSTALL_PREFIX=$prefixroot ../

/home/SDK/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=/home/SDK/native/build/cmake/ohos.toolchain.cmake.. -L -DDEFINE_LINUX64=ON -DCMAKE_INSTALL_PREFIX=$prefixroot ../
make
make install
cd ..
cd ..

echo 'configuring openssl ...'
tar zxvf ${libsources}/openssl-1.0.2l.tar.gz
cd openssl-1.0.2l
if [ "$(uname -m)" = "arm64" ]; then
    ./Configure --prefix=$prefixroot --openssldir=$prefixroot/ssl
elif [ "$(uname -s)" = "Linux" ]; then
    ./Configure shared $CONFIGURE_ARGS linux-aarch64 --prefix=$prefixroot --openssldir=$prefixroot/ssl
else
    echo "Unsupported OS or architecture for OpenSSL compilation."
    exit 1
fi
make -j10
make install
cd ..

echo 'configuring protobuf ...'
tar zxvf ${libsources}/protobuf-all-3.13.0.tar.gz
cd protobuf-3.13.0
./autogen.sh
./configure --host=aarch64-linux CFLAGS="-fPIC" CXXFLAGS="-fPIC" --disable-protoc
make -j10
make install
定义目录路径
bin_dir="$prefixroot/bin"
include_dir="$prefixroot/include"
lib_dir="$prefixroot/lib"
判断目录是否存在
if [ ! -d "$bin_dir" ]||[ ! -d "$include_dir" ]|| [ ! -d "$lib_dir" ]; then
    echo "目录文件不存在正在创建..."
    mkdir -p $bin_dir
    echo "目录 $bin_dir 已存在"
    mkdir -p $include_dir
    echo "目录 $include_dir 已存在"
    mkdir -p $lib_dir
    echo "目录 $lib_dir 已存在"
fi
cp -rf /usr/local/bin/protoc $prefixroot/bin/
cp -rf /usr/local/include/google $prefixroot/include/
cp -rf /usr/local/lib/*proto* $prefixroot/lib/
cp -rf /usr/local/lib/pkgconfig/* $prefixroot/lib/pkgconfig/
cd ..


[*]第二个方法:下载鸿蒙仓上的三方库去编译地址点击OpenHarmony-SIG/tpc_c_cplusplus鸿蒙三方库,步骤如下,脚本:
echo 'configuring boost ...'
# $tpc_c_cplusplus_dir选取OpenHarmony三方库在本地具体路径
tpc_c_cplusplus_dir="/home/tpc_c_cplusplus"
boost_include_dir="$tpc_c_cplusplus_dir/lycium/usr/boost/arm64-v8a/include"
boost_lib_dir="$tpc_c_cplusplus_dir/lycium/usr/boost/arm64-v8a/lib"
if [ ! -d "$prefixroot/include" ]||[ ! -d "$prefixroot/lib" ]; then
    echo "目录文件不存在正在创建..."
    mkdir -p $prefixroot/include
    echo "目录 $prefixroot/include 已存在"
    mkdir -p $prefixroot/lib
    echo "目录 $prefixroot/lib 已存在"
fi
# 检查 include 目录是否存在
if [ ! -d "$boost_include_dir" ]; then
    echo "Boost include directory does NOT exist: $boost_include_dir"
    cd /home
    #下载鸿蒙三方开源boost
    git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git
    cd tpc_c_cplusplus/lycium/
    #更新依赖工具的命令,如果ninja安不上可以查看文档:https://blog.csdn.net/weixin_60917883/article/details/133990450?spm=1001.2014.3001.5502
    sudo apt-get update
    sudo apt-get install cmake pkg-config autoconf ninja-build
    ./build.sh boost
    echo "Boost include directory generated and copied"
    cp -rf "$boost_include_dir"/* "$prefixroot/include/"
else
    echo "Boost include directory exists: $boost_include_dir"
    cp -rf "$boost_include_dir"/* "$prefixroot/include/"
fi
# 检查 lib 目录是否存在
if [ ! -d "$boost_lib_dir" ]; then
    echo "Boost library directory does NOT exist: $boost_lib_dir"
    echo "Judging that boost_include_dir has already been successfully obtained"
    # boost_lib_dir路径从判断boost_include_dir就已经获取到了,然后复制
    cp -rf "$boost_lib_dir"/* "$prefixroot/lib/"
else
    echo "Boost library directory exists: $boost_lib_dir"
    cp -rf "$boost_lib_dir"/* "$prefixroot/lib/"
fi

cd "$prefixroot"
步骤里的第三、第四方法一块讲

相关文档参考:通过IDE集成非cmake方式构建的C/C++三方库
对比三四方法区别与简述图示

https://i-blog.csdnimg.cn/direct/ca2b7afafb034622952a23edffcfeeaf.png
1、在Dev中创建c++项目
2、把自己需要移植的代码下载下来


[*]第三个方法:移植全部代码放入Dev中
[*]第四个方法:截取部门代码
可参考文章Harmony OS 应用开发 - 怎样迁移Crash监控
- 编译后:

涉及知识点:napi、native、ndk、js、ets、hap

知识点相识及扩展

简述步骤

编译出第三方库放入Dev->袒露napi接口调用底层c++逻辑->写js前端代码调napi回调->调试
具体步骤

Node.js v22.9.0 文档

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【鸿蒙】跨平台三方框架(一)-迁移三方库到鸿蒙(还差源码未调试完,调试