Learn what Felgo offers to help your business succeed. Start your free evaluation today! Felgo for Your Business

Qt for Android - Building User Projects

Building with 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 variable to 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>

Using the 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>

Note: 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.

Note: QT_ANDROID_BUILD_ALL_ABIS has higher priority than 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> variables.

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:

\dots 0
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.

Building with qmake

You can continue to use qmake to build user projects.

Note: Building multi-ABI packages with qmake is not supported in Qt 6.

See also QT_ANDROID_ABIS, QT_ANDROID_BUILD_ALL_ABIS, QT_PATH_ANDROID_ABI_<ABI>, and QT_ANDROID_ABIS.

Qt_Technology_Partner_RGB_475 Qt_Service_Partner_RGB_475_padded