技术文档 | Qt for OpenHarmony开发环境搭建与部署手册

科技   2024-11-06 10:39   上海  


OpenHarmony介绍

OpenHarmony是开放原子基金会孵化并运营的开源项目,目标是构建智能终端设备操作系统的框架与平台,旨在面向全场景、全连接、全智能时代的到来,推动万物互联产业的蓬勃发展。

OpenHarmony开源项目



华为DevEco Studio安装


如果您想开发Qt for OpenHarmony应用程序,除了使用Qt Creator之外,还需要依赖DevEco Studio。


https://developer.huawei.com/consumer/cn/deveco-studio/


一般情况下,不需要配置DevEco Studio使用的sdk版本,因为DevEco Studio默认自带了一个sdk。


但是如果包含的sdk不能满足你的需求,你可以通过下面的方法设置你想要使用的sdk版本:

对于OpenHarmony5,您需要安装API版本为12的SDK:

为了避免因开发环境导致的任何问题,请首先确认是否可以使用DevEco Studio来开发Arkts应用程序。



Gerrit 简介


Qt源代码托管在Gerrit上,用于代码审查和版本控制。有关如何使用Gerrit的所有必要信息都可以在以下页面查看:


如何获取

Qt for OpenHarmony源代码

  1. 访问并登录: 

    https://codereview.qt-project.org


  2. 点击右上角的“设置”,打开设置页面。


  3. 点击“设置”->“HTTP 凭证”->“生成新密码”生成新密码。保存密码以便稍后使用“git clone”使用。


  4. 访问https://codereview.qt-project.org/admin/repos/qt/tqtc-qt5

    并克隆git 仓库地址。


  5. cd tqtc-qt5


  6. 切换分支:git checkout tqtc/harmonyos-5.12.12 or git checkout tqtc/harmonyos-5.15.16


  7. 更新子模块:git submodule update --init --recursive



在macOS中

为Qt for OpenHarmony构建Qt库


准备第三方依赖项

以下说明只是基于macOS Sonoma14.0进行准备,并不代表最低依赖条件。

  • git版本2.39.3

  • python3.12.0


系统环境变量

打开~/.zshrc或者~/.bashrc ,并添加一下内容:


local HARMONY_OS_API_VER=12
local HOME_LIBRARY=${HOME}/Library
export OHOS_SDK_ROOT=${HOME_LIBRARY}/OpenHarmony/Sdk
export HOS_SDK_HOME=${HOME_LIBRARY}/OpenHarmony/Sdk
export OHOS_SDK_12=${HOS_SDK_HOME}/${HARMONY_OS_API_VER}
export NATIVE_OHOS_SDK=${OHOS_SDK_12}/native


构建Qt源代码

您可以使用以下脚本以arm64-v8a为目标构建Qt。

请填写您本地源目录的路径。


#!/bin/sh

# Target architecure
ARCH="arm64-v8a"

# Source and build directories
QT5_ROOT_DIR=<ENTER PATH TO YOUR qt/qt5 DIRECORY>
QT5_BUILD_DIR="$QT5_ROOT_DIR/build_${ARCH}"

# Prepare build directory
mkdir "$QT5_BUILD_DIR"
cd "$QT5_BUILD_DIR"

../configure \
-v \
-xplatform ohos-clang \
-prefix ${NATIVE_OHOS_SDK}/opt/Qt/5.12.12/ohos-${ARCH}-clang/ \
-opensource \
-confirm-license \
-release \
-no-use-gold-linker \
-no-gcc-sysroot \
-ohos-arch ${ARCH} \
-opengles3 \
-skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d \
-skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtdocgallery -skip qtfeedback \
-skip qtgamepad -skip qtgraphicaleffects -skip qtlocation -skip qtmacextras -skip qtnetworkauth \
-skip qtpim -skip qtpurchasing -skip qtqa -skip qtremoteobjects -skip qtrepotools \
-skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport \
-skip qtspeech -skip qtsystems -skip qttools -skip qttranslations -skip qtvirtualkeyboard \
-skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets \
-skip qtwebview -skip qtwinextras -skip qtx11extras -skip doc \
-no-dbus \
-c++std c++14 \
-make tests

然后,


make -j16
make install


在macOS中为OpenHarmony

构建Qt应用程序

在Qt Creator中为OpenHarmony创建开发工具包

转到Preferences → Kits → Qt Versions. 单击添加Add….按钮


配置Qt版本

选择编译Qt for OpenHarmony源代码生成的qmake文件


配置编译器

转到Compilers选项卡. 单击Add按钮,,然后选择Custom → C.


设置填写

Name: OHOS Clang

Compiler path:/path/to/OpenHarmony/Sdk/12/native/llvm/bin/clang

Make Path: /usr/bin/make

ABI: arm - linux - generic - elf - 64bit


对于C++编译器,请按照上述步骤操作。不过,请确保将名称设置为OHOS Clang++,并在编译器路径中选择并使用clang++。


配置套件

转到Kits选项卡。

单击Add按钮。


在Qt Creator中设置所需的环境变量

转到Preferences → Environment → System ,然后单击环境中系统选项的Change… 按钮.

通过添加一行来添加新的环境变量:

NATIVE_OHOS_SDK=/path/to/OpenHarmony/Sdk/12/native


在Windows中

为OpenHarmony构建Qt库

准备构建环境

使用recursive参数从Gerrit克隆qt5存储库以获取所有子模块,Qt for OpenHarmony/zh#如何获取Qt for OpenHarmony源代码。


安装DevEco Studio并从其SDK管理器中下载OpenHarmony/native包,Qt for OpenHarmony/zh#华为DevEco Studio安装。


下载MinGW工具链

例如llvm-mingw-20230919-ucrt-x86_64.zip from Releases · mstorsjo/llvm-mingw解压并将文件夹复制到 d:\

安装Perl

Strawberry Perl for Windows

将MinGW和Perl路径添加到PATH环境变量中,如下所示


另外在系统环境变量中添加MINGW_ROOT和 PERL_ROOT :

打开命令提示符(使用CMD工具),并按照一下方式设置环境变量


REM set NATIVE_OHOS_SDK 
SET NATIVE_OHOS_SDK=D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native

REM set OHOS_SDK_SYSROOT
SET OHOS_SDK_SYSROOT=%NATIVE_OHOS_SDK%\sysroot

REM set LLVM_INSTALL_DIR
SET LLVM_INSTALL_DIR=%NATIVE_OHOS_SDK%\llvm

构建

使用相同的命令提示符找到你的qt5仓库目录并创建与之并行的build目录(不要设置build目录是qt5仓库目录的子目录)。然后转到build目录,设置一个包含跳过的部分子模块的变量并运行configure命令:


REM set QT_SKIPS 
SET QT_SKIPS=-skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtdocgallery -skip qtfeedback -skip qtgamepad -skip qtgraphicaleffects -skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpim -skip qtpurchasing -skip qtqa -skip qtremoteobjects -skip qtrepotools -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsystems -skip qttools -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -no-dbus -skip doc

REM  configure command
call ..\tqtc-qt5\configure.bat -v -xplatform ohos-clang -device-option CROSS_COMPILE=%LLVM_INSTALL_DIR%\bin -prefix c:\Qt\qt-5.12.12-ohos -opensource -confirm-license -debug -no-use-gold-linker %QT_SKIPS% -nomake tests -nomake examples -no-gcc-sysroot -opengles3 -c++std c++14 -ohos-arch arm64-v8a

配置成功后,您可以使用mingw32-make进行构建


REM build mingw32-make mingw32-make -j8

构建成功后,您可以使用以下命令开始安装


mingw32-make install

在Windows中为OpenHarmony 

构建Qt应用程序

以下说明内容的前提是,您已经安装了DevEco studio、OpenHarmony工具链,已经有OpenHarmonyOS的设备。


请注意Qt5构建 + 多个选项,目前Arch是arm64-v8a。


准备 下载Qt Creator作为Qt开发的IDE

下载Qt Creator,手动创建OpenHarmony构建套件


在Qt Creator中为OpenHarmony创建开发工具包

前往编辑 → 偏好设置 → 构建套件


配置Qt版本

转到Qt版本选项卡,单击添加按钮

转到安装Qt 5.12.12 for OHOS的文件夹(应安装在 PREFIX 指定的路径中),然后转到bin文件夹,选择 qmake应用程序并单击打开。例如,之前使用 PREFIX=C:\Qt\qt-5.12.12-ohos 编译了Qt源代码,因此 qmake将位于C:\Qt\qt-5.12.12-ohos\bin\qmake。将名称设置为Qt%{Qt:Version} for OHOS。此时,应该有信息表明没有可以为此Qt版本生成代码的编译器。

配置编译器

转到“编译器”选项卡。单击“添加”按钮,然后选择“自定义”→“C”

将名称设置为OHOS Clang。

假设您已按照说明从源代码开始构建Qt 5.12.12 for OHOS,那么应该已经安装了llvm-mingw。如果没有,请按照MinGW工具链安装步骤执Qt for OpenHarmony/zh#准备构建环境

将Make路径设置为MinGW工具链附带的mingw32-make.exe可执行文件。它应位于\bin\mingw32-make.exe。不要忘记将替换为实际路径。

将ABI更改为arm - linux - generic - elf - 64bit

对于c++编译器,请按照上述步骤操作。不过,这次请确保将名称设置为OHOS Clang++,并在编译器路径中选择clang++.exe。

配置构建套件

转到 构建套件选项卡,单击添加按钮

将名称设置为OHOS Clang

将Sysroot设置为

D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native\sysroot。在Compiler 部分,选择之前配置的C(OHOS Clang) 和 C++(OHOS Clang++) 编译器。

在Qt版本中选择之前为OHOS配置的Qt 5.12.12。

将Qt mkspec设置为ohos-clang。

完整的套件应如下所示:

在Qt Creator中设置所需的环境变量

转到编辑→首选项→环境→系统,然后单击环境部分中的Change...按钮。

通过添加一行

NATIVE_OHOS_SDK=D:\oh\DevEcoStudio\sdk\HarmonyOS-NEXT-DB6\openharmony\native添加新的环境变量


获取DevEco项目模板

请联系我们以获取用于构建最终OpenHarmony Qt应用程序的DevEco项目模板。这将用于在OpenHarmony设备上运行Qt应用程序。

将DevEco项目模板放入已知位置。我们将其命名为

转到文件夹\entry并创建一个文件夹\entry\libs\arm64-v8a


编译一个简单的Qt项目

为了简化此说明,我们不会从头开始创建应用程序,而是使用Qt widget的现有示例。


转到您的Documents文件夹并创建一个名为 qt_creator_projects 的新文件夹。然后转到资源管理器中的\examples\widgets\widgets 文件夹并将整个计算器文件夹复制到 qt_creator_projects 文件夹中


然后,在QtCreator中,单击文件→打开文件或项目,然后转到qt_creator_projects\calculator并选择 calculator.pro。


在“配置项目”选项卡中,选择OHOS Clang套件并单击“配置项目”按钮。


通过单击Build → Build Project “calculator”来触发编译,或者使用快捷键:Ctrl+B。项目应该可以顺利编译。


您应该能够在Documents\qt_creators_projects\build-calculator-OHOS_Clang-Debug文件夹中找到已编译的libcalculator.so文件



在硬件上运行 

Qt for OpenHamony应用程序

建最终的OHOS应用程序

将上一步中的libcalculator.so文件复制到您的\entry\libs\arm64-v8a文件夹中

然后将所需的库从\lib\ 复制到\entry\lib\arm64-v8a\

例如,对于libQt5Widgets.so库,它的复制方法如下(Powershell):


Copy-Item "<qt-install-path>\lib\libQt5Widgets.so" -Destination "<deveco-project>\entry\libs\arm64-v8a\"

类似地,您可以找到OHOS qpa插件的所有依赖项,以确保您拥有所有必要的库。


修改ets中的初始加载

一旦复制了所有库,我们就可以修改ets源代码,

在DevEco中打开:


打开文件\entry\src\main\ets\qabilitystage\QAbilitystage.ets。将 qtApplicationName变量更改为我们要使用的库的名称(libcalculator.so)


构建并运行应用程序

确保设备已连接。连接后,它应该在DevEco Studio中可见。

然后添加签名配置,打开file--project structure--signing configs,勾选所有项,点击OK。

在DevEco Studio中选择设备后,您可以直接构建并运行应用程序:

编译成功,您可以看到应用程序在目标设备上正常运行。



推荐阅读:
翻译 | Qt 6.8 LTS发布!
演讲视频 | Qt 6.6及更高版本中2D及3D图形的改进
演讲视频 | 将Qt 5应用程序移植到Qt 6


Qt软件
Qt Group是一家全球软件公司,致力于开发用户喜爱的应用程序和智能设备,深受行业领导者和全球超过 150 万开发人员的信赖。我们帮助客户在整个产品开发生命周期中提高生产力——从 UI 设计和软件开发到质量管理和部署。网址:qt.io
 最新文章