User:Joger/Building Qt Multimedia for Android

From Qt Wiki
Jump to navigation Jump to search

About this page

On this page, I describe how I build Qt for my Android device, which is a Samsung Galaxy S6. I work primarily with Qt Multimedia. I therefore need a build setup that makes it easy to debug, run tests, and examples from within an IDE without spending too much time on reconfiguring and rebuilding all of Qt. This tutorial follows the steps from the official Qt documentation at Qt for Android - Building from Source | Qt 6.7. In addition, I show how to configure Qt as a separate submodule to reduce the need for reconfiguring and rebuilding all of Qt.

My build setup

  • OS: Windows 11 with dev drive mounted on K: (Using a dev drive makes builds faster when using Windows Defender antivirus)
  • Qt source tree: K:\qt\android\qt6
  • Build directory main Android build: K:\qt\android\android
  • Main (host) build for dev branch: K:\qt\android\host
  • Visual Studio 2022 (MSVC)
  • Don't have perl in path as it can cause hard to understand build failures
  • Have cmake in path

Setting up Android SDK/NDK and JAVA

  1. Install Qt Creator with Android option using Qt Maintenance Tool
  2. In Creator preferences, install Adoptium JDK (C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot)
  3. Android SDK location: C:\Utils\Android
  4. Select Android NDK 26.1.10909125 and make default
  5. Oppenssl location: C:\Utils\Android\android_openssl
  6. Verify Android settings:

Android settings 26.png

  1. Add Android device for ABI x86_64, OS Version 13.0 ("Tiramisu") (SDK 33)

Android Emulator.png

Install MINGW

Run provisioning script from "K:\qt\android\qt6\coin\provisioning\common\windows\install-mingw.ps1" as administrator. This installs MINGW into C:\MINGW_PATH.

Creating Qt Host Build

Follow steps in https://doc.qt.io/qt-6/android-building.html to create a host build.

Clone Qt source code

K:\qt\Android> git clone git://code.qt.io/qt/qt5.git qt6

Initialize Qt submodules and configure the host build

K:\qt\Android\host> ..\qt6\configure -developer-build -nomake tests -nomake examples -submodules qtmultimedia -init-submodules -codereview-username <gerrit username>

Build the host build

K:\qt\Android\host> cmake --build . --target host_tools --parallel

Building Qt for Android on Windows

This build setup works with my Samsung Galaxy S6 tablet

Enable the MINGW compiler suite

set MINGW_ROOT=C:\MINGW_PATH\mingw64\bin
set PATH=%MINGW_ROOT%;%PATH%

Configure Qt for cross compile with Android using the host host build from K:\qt\android\host\qtbase.

K:\qt\Android\android> ..\qt6\configure -debug -developer-build -qt-host-path K:\qt\android\host\qtbase -android-abis arm64-v8a -android-sdk C:\utils\android\ -android-ndk C:\utils\android\ndk\26.1.10909125\ -submodules qtmultimedia
 -nomake tests -nomake examples && ninja.exe

Build

K:\qt\Android\android> ninja

Configure QtMultimedia module for cross compiling with Android

When working with QtMultimedia, it is convenient to configure a separate build just for this submodule. This makes configuring and rebuilding faster as long as we only touch code in this submodule.

K:\qt\android\qtmultimedia> ..\android\qtbase\bin\qt-configure-module.bat ..\qt6\qtmultimedia -- -DQT_BUILD_TESTS=ON -DQT_BUILD_EXAMPLES=ON -DQT_BUILD_TESTS_BY_DEFAULT=OFF -DQT_BUILD_EXAMPLES_BY_DEFAULT=OFF -DQT_BUILD_EXAMPLES_AS_EXTERNAL=OFF

Importing Qt Multimedia build into QtCreator

  1. Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia
  2. Deselect all kits
  3. Import build from K:\qt\android\qtmultimedia
    • This creates a Android Qt 6.9.0 (android) Clang arm64-v8a
    • Press 'Configure' button
  4. Connect the Android device and go to Edit->Preferences->Devices, select Android tab, and make sure that configuration does not show any errors.
  5. Select the project to build, and make sure the correct Android device is selected
    Image.png