Building Qt for Android Projects from Command Line
Building with CMake
To build CMake projects with an installed Qt, for example, for Linux use the following with qt-cmake wrapper:
~/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
Throughout this page, we use the Android SDK path for Linux for simplicity, however, when issuing these commands, make sure to use your system's relevant path.
The Android SDK is commonly installed by Qt Creator or Android Studio in the following locations:
- Linux: ~/Android/Sdk/
- macOS: ~/Library/Android/sdk/
- Windows: C:\Users\<USER>\AppData\Local\Android\Sdk\
Note: If you're using a self-built Qt, you don't need to provide the SDK and NDK arguments, as the same values used for building Qt are used with qt-cmake.
Building multi-ABI packages using CMake
In Qt 6.8, several ways exist to build 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 Qt Online Installer:
~/Qt/<qt_version>: android_arm64_v8a android_armv7 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 Qt Online Installer:
~/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
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/<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
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 \ -DANDROID_NDK_ROOT=~/Android/Sdk/ndk/26.1.10909125 \ -S <source_directory> -B <build_directory> -GNinja
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.
Creating the Android Bundle
Once the project is configured, you may use the following CMake targets to create the application bundle:
cmake --build . --target apk
Or to generate the AAB:
cmake --build . --target aab
Under the hood, your Qt code is built and copied to the android-build
directory, then Gradle is used to build the Java code and package the application.
Signing the Android Package
If an APK intended for release is built, then it should be signed. For more information on signing the package with Qt Creator, see Signing Android packages. Otherwise, check the CMake variables QT_ANDROID_SIGN_APK and QT_ANDROID_SIGN_AAB.
Building an AAR (Android Archive) File
cmake --build . --target aar
Building with qmake
You can continue to use qmake
to build user projects as in Qt 5.
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.