Qt for Android - Building User Projects

构建采用 CMake

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:

Building multi-ABI packages using CMake

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 构建

可以继续使用 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