从命令行构建适用于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-v8a
和x86
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-v7a
和arm64-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-v7a
和 arm64-v8a
构建目标,即使设置了 QT_ANDROID_BUILD_ALL_ABIS
或 QT_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_APK 和 QT_ANDROID_SIGN_AAB。
使用 qmake 构建
您可以继续像在 Qt 5 中一样使用 qmake
构建用户项目。
注意:在 Qt 6 中不支持使用 qmake
构建多 ABI 打包。
另请参阅:QT_ANDROID_ABIS、QT_ANDROID_BUILD_ALL_ABIS、QT_PATH_ANDROID_ABI_<ABI> 和 QT_ANDROID_ABIS。
© 2024 The Qt Company Ltd.此处包含的文档贡献是各自所有者的版权。此处提供的文档是在自由软件基金会发布的前提下,根据 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为各自所有者的财产。