To build CMake projects with an installed or a self-built Qt, use qt-cmake wrapper. For Android the following has to be provided:
<qt_for_android_install_path>/bin/qt-cmake \ -DANDROID_SDK_ROOT=<android_sdk_path> \ -DANDROID_NDK_ROOT=<android_ndk_path> \ -S <source_dir> -B <build_dir> \ [-G"<Ninja|Unix Makefiles>"]
Qt for Android automatically collects Android package dependencies from a project build tree and uses known library paths. It's also possible to specify various dependencies that need to be deployed within a target package using the following target properties:
Introduced in Qt 6.3.
There are several ways to enable building a multi-ABI package. By default only the single ABI belonging to the
qt-cmake
script is selected. Setting the
QT_ANDROID_BUILD_ALL_ABIS
变量到
TRUE
enables the automatic detection of available Qt for Android SDKs. The detection mechanism assumes the use of the default directory structure supplied by the Qt installer:
<path/to/Qt>/\1 android_armv7 android_arm64_v8a android_x86 android_x86_64
The command below shows the easiest way to build an Android multi-ABI package using the Qt for Android SDKs supplied by the Qt installer:
<qt_for_android_install_path>/bin/qt-cmake \ -DQT_ANDROID_BUILD_ALL_ABIS=TRUE \ -DANDROID_SDK_ROOT=<android_sdk_path> \ -DANDROID_NDK_ROOT=<android_ndk_path> \ -S <source_directory> -B <build_directory>
使用
QT_ANDROID_ABIS
variable, it's possible to customize the list of ABIs the project is built for. The corresponding Qt for Android development kits needs to follow the directory structure described previously. The following command line configures a project for
arm64-v8a
and
x86
ABIs only:
<qt_for_android_install_path>/bin/qt-cmake \ -DQT_ANDROID_ABIS="arm64-v8a;x86" \ -DANDROID_SDK_ROOT=<android_sdk_path> \ -DANDROID_NDK_ROOT=<android_ndk_path> \ -S <source_directory> -B <build_directory>
注意: The ABI of the primary SDK that qt-cmake script belongs to is added to the list of used ABIs unconditionally. It's not possible to exclude it from the build.
注意: QT_ANDROID_BUILD_ALL_ABIS 拥有更高优先级相比 QT_ANDROID_ABIS .
Paths to the Qt for Android SDKs that do not match the default directory structure can be changed using the corresponding QT_PATH_ANDROID_ABI_<ABI> 变量。
The following example enables the automatic detection of available Qt for Android SDKs and specifies custom paths to
armeabi-v7a
and
arm64-v8a
SDKs:
<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_path> \ -DANDROID_NDK_ROOT=<android_ndk_path> \ -S <source_directory> -B <build_directory>
It's also possible to set the QT_ANDROID_ABIS target property that specifies a list of ABIs that the single executable target is built for. For example:
...
qt_add_executable(MyApp main.cpp) set_target_properties(MyApp PROPERTIES QT_ANDROID_ABIS "arm64-v8a;x86")
The
MyApp
target will be built for
armeabi-v7a
and
arm64-v8a
only, even if the
QT_ANDROID_BUILD_ALL_ABIS
or
QT_ANDROID_ABIS
variable is set.
可以继续使用
qmake
to build user projects.
注意:
Building multi-ABI packages with
qmake
is not supported in Qt 6.
另请参阅 QT_ANDROID_ABIS , QT_ANDROID_BUILD_ALL_ABIS , QT_PATH_ANDROID_ABI_<ABI> ,和 QT_ANDROID_ABIS .
Qt for Android - 从源代码构建 移植到 Android