从命令行构建 Qt for Android 项目

使用 CMake 构建

要使用已安装的 Qt 构建 CMake 项目,以 Linux 为例,请使用qt-cmakewrapper 执行以下命令:

~/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\<USER>\AppData\Local\Android\Sdk\

注意: 如果使用的是自建Qt,则无需提供 SDK 和 NDK 参数,因为用于构建 Qt 的值与qt-cmake 相同。

使用 CMake 构建 multi-ABI 软件包

在 Qt 6.9 中,有几种构建多 ABI 软件包的方法。默认情况下,只选择属于qt-cmake脚本的单一 ABI。将QT_ANDROID_BUILD_ALL_ABIS变量设置为TRUE 可自动检测可用的 Qt for Android SDK。检测机制假定使用Qt Online Installer 提供的默认目录结构:

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

下面的命令显示了使用Qt Online Installer 提供的 Qt for Android SDK 构建 Android multi-ABI 软件包的最简单方法:

~/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

还可以设置QT_ANDROID_ABIStarget 属性,该属性指定了单个可执行目标为之构建的 ABI 列表。例如

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

构建 AAR(安卓存档)文件

cmake --build . --target aar

使用 qmake 生成

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

注意: Qt 6 不支持使用qmake 来构建 multiABI 软件包。

另请参阅 QT_ANDROID_ABISQT_ANDROID_BUILD_ALL_ABISQT_PATH_ANDROID_ABI_<ABI>QT_ANDROID_ABIS

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.