Qt for OpenHarmony/zh

From Qt Wiki
Jump to navigation Jump to search


中文 English

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版本:

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

DevEco_Studio_Preferences

为了避免因开发环境导致的任何问题,请首先确认是否可以使用 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
Codereview-settings.png


GENERATE-NEW-PASSWORD.png










Git-address.png

在 macOS 中为 Qt for OpenHarmony 构建 Qt 库

准备第三方依赖项

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

  • git 版本 2.39.3
  • python 3.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 创建开发工具包

转到 PreferencesKitsQt Versions. 单击添加 Add….按钮

Macos-qtversion-add.jpg

配置 Qt 版本

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

Macos-oh-qmake.jpg

配置 编译器

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

Oh-compile-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

Compilers-filled.jpg

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

并使用 clang++。

CppCompilers-filled.jpg

配置套件

转到 Kits 选项卡。

单击 Add按钮。

Kits.jpg

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

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

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

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

Change-env.jpg

在 Windows 中为 OpenHarmony 构建 Qt 库

准备构建环境

  • 安装 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 环境变量中,如下所示:

    Add environment variable.png

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

    Add root for environment.png

  • 打开命令提示符 (使用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版本选项卡,单击添加按钮

Add kits.png

转到安装 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 版本生成代码的编译器。

Add qt version.png

配置编译器

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

将名称设置为 OHOS Clang。

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

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

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

Add clang c.png

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

Add clang c++.png

配置构建套件

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

将名称设置为 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。

完整的套件应如下所示:

Add ohos clang.png

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

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

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

Add environment.png

获取 DevEco 项目模板

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

将 DevEco 项目模板放入已知位置。我们将其命名为 <deveco-project>

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

编译一个简单的 Qt 项目

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

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

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

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

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

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

在硬件上运行 Qt for OpenHamony 应用程序

构建最终的 OHOS 应用程序

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

然后将所需的库从 <qt-install-path>\lib\ 复制到 <deveco-project>\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 中打开 <deveco-project>:

Open template app.png

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

Edit EntryAbility.ts.png

构建并运行应用程序

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

Device .png

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

Tempsnip.png

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

Run app.png

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