从命令行构建适用于Android的Qt项目

使用CMake构建

要使用已安装的Qt使用CMake构建项目,例如,对于Linux,请使用以下命令与qt-cmake包装器

~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
    -DANDROID_SDK_ROOT=~/Android/Sdk \
    -DANDROID_NDK_ROOT=~/Android/Sdk/ndk/26.1.10909125 \
    -S <source_dir> -B <build_dir> \
    -GNinja

在本页的整个过程中,我们为了简便起见使用了Linux中的Android SDK路径,然而,在运行这些命令时,请确保使用系统中的相关路径。

Android SDK通常被Qt Creator或Android Studio安装在下述位置

  • Linux: ~/Android/Sdk/
  • macOS: ~/Library/Android/sdk/
  • Windows: C:\Users\\AppData\Local\Android\Sdk\

注意:如果您使用的是自行编译的 Qt,您不需要提供SDK和NDK参数,因为构建Qt时使用的相同值与qt-cmake一起使用。

使用CMake构建多ABI包

在Qt 6.7中,存在几种构建多ABI包的方法。默认情况下,只有属于qt-cmake脚本的单一ABI被选中。将QT_ANDROID_BUILD_ALL_ABIS变量设置为TRUE将启用对可用的Qt for Android SDK的自动检测。检测机制假定使用Qt在线安装程序提供的默认目录结构

~/Qt/<qt_version>:
    android_arm64_v8a
    android_armv7
    android_x86
    android_x86_64

以下命令显示了构建使用Qt在线安装程序提供的Qt for Android SDK的最简单的方法

~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
    -DQT_ANDROID_BUILD_ALL_ABIS=TRUE \
    -DANDROID_SDK_ROOT=~/Android/Sdk \
    -DANDROID_NDK_ROOT=~/Android/Sdk/ndk/26.1.10909125 \
    -S <source_directory> -B <build_directory>
    -GNinja

使用QT_ANDROID_ABIS变量,可以自定义项目构建的ABI列表。相应的Qt for Android开发套件需要遵循之前描述的目录结构。以下命令行仅配置为为arm64-v8ax86 ABI构建项目的项目

~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
    -DQT_ANDROID_ABIS="arm64-v8a;x86" \
    -DANDROID_SDK_ROOT=~/Android/Sdk \
    -DANDROID_NDK_ROOT=~/Android/Sdk/ndk/26.1.10909125 \
    -S <source_directory> -B <build_directory>
    -GNinja

注意:qt-cmake脚本所属的主要SDK的ABI无条件地添加到使用的ABI列表中。无法从构建中排除。

注意:QT_ANDROID_BUILD_ALL_ABIS的优先级高于QT_ANDROID_ABIS

可以更改不匹配默认目录结构的Qt for Android SDK路径,使用相应的QT_PATH_ANDROID_ABI_<ABI>变量。

以下示例启用了对可用的Qt for Android SDK的自动检测,并指定了到armeabi-v7aarm64-v8a SDK的定制路径

<qt_for_android_install_path>/bin/qt-cmake \
    -DQT_ANDROID_BUILD_ALL_ABIS=TRUE
    -DQT_PATH_ANDROID_ABI_armeabi-v7a="<Qt/for/armeabi-v7a>" \
    -DQT_PATH_ANDROID_ABI_arm64-v8a="<Qt/for/arm64-v8a>" \
    -DANDROID_SDK_ROOT=~/Android/Sdk \
    -DANDROID_NDK_ROOT=~/Android/Sdk/ndk/26.1.10909125 \
    -S <source_directory> -B <build_directory>
    -GNinja

还可以设置指定单一可执行目标构建的ABI列表的QT_ANDROID_ABIS目标属性。例如

qt_add_executable(MyApp main.cpp)
set_target_properties(MyApp PROPERTIES QT_ANDROID_ABIS "arm64-v8a;x86")

MyApp 目标将仅针对 armeabi-v7aarm64-v8a 构建目标,即使设置了 QT_ANDROID_BUILD_ALL_ABISQT_ANDROID_ABIS 变量。

创建 Android 打包

项目配置完成后,您可以使用以下 CMake 目标来创建应用程序打包

cmake --build . --target apk

或生成 AAB

cmake --build . --target aab

幕后,您的 Qt 代码被构建并复制到 android-build 目录,然后使用 Gradle 构建 Java 代码并打包应用程序。

对 Android 打包签名

如果构建了用于发布的 APK,那么它应该被签名。有关使用 Qt Creator 签名包的更多信息,请参阅 签名 Android 打包。否则,检查 CMake 变量 QT_ANDROID_SIGN_APKQT_ANDROID_SIGN_AAB

使用 qmake 构建

您可以继续像在 Qt 5 中一样使用 qmake 构建用户项目。

注意:在 Qt 6 中不支持使用 qmake 构建多 ABI 打包。

另请参阅:QT_ANDROID_ABISQT_ANDROID_BUILD_ALL_ABISQT_PATH_ANDROID_ABI_<ABI>QT_ANDROID_ABIS

© 2024 The Qt Company Ltd.此处包含的文档贡献是各自所有者的版权。此处提供的文档是在自由软件基金会发布的前提下,根据 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为各自所有者的财产。