User:Joger/Building Qt Multimedia for Android: Difference between revisions
Line 58: | Line 58: | ||
# Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia | # Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia | ||
# Deselect all kits | # Deselect all kits | ||
# Import build from | # Import build from K:\qt\android\qtmultimedia | ||
#* This creates a Android Qt 6. | #* This creates a Android Qt 6.9.0 (android) Clang arm64-v8a | ||
#* Configure | #* Press 'Configure' button | ||
# | # Connect the Android device and go to Edit->Preferences->Devices, select Android tab, and make sure that configuration does not show any errors. | ||
# Select the project to build, and make sure the correct Android device is selected[[File:Image.png|thumb]] | |||
Revision as of 13:52, 11 August 2024
About this page
On this page I describe how I build Qt Multimedia for Android on Windows.
See also Qt documentation at Qt for Android - Building from Source | Qt 6.7
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
- Install Qt Creator with Android option using Qt Maintenance Tool
- In Creator preferences, install Adoptium JDK (C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot)
- Android SDK location: C:\Utils\Android
- Select Android NDK 26.1.10909125 and make default
- Oppenssl location: C:\Utils\Android\android_openssl
- Verify Android settings:
- Add Android device for ABI x86_64, OS Version 13.0 ("Tiramisu") (SDK 33)
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
- Open QtMultimedia CMakeLists.txt from D:\qt\qt6\qtmultimedia
- Deselect all kits
- Import build from K:\qt\android\qtmultimedia
- This creates a Android Qt 6.9.0 (android) Clang arm64-v8a
- Press 'Configure' button
- Connect the Android device and go to Edit->Preferences->Devices, select Android tab, and make sure that configuration does not show any errors.
- Select the project to build, and make sure the correct Android device is selected