Qt for Android - Building from Source Porting to Android
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 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.
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.
As part of the free Business evaluation, we offer a free welcome call for companies, to talk about your requirements, and how the Felgo SDK & Services can help you. Just sign up and schedule your call.
Sign up now to start your free Business evaluation: