User:Joger/Building Qt Multimedia for Android: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
mNo edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
== About this page ==
== About this page ==
On this page I describe how I build Qt Multimedia for Android on Windows.
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 [https://doc.qt.io/qt-6/android-building.html 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==
==My build setup==
* OS: Windows 11 with dev drive mounted on D: (Using a dev drive makes builds faster when using Windows Defender antivirus)
* OS: Windows 11 with dev drive mounted on K: (Using a dev drive makes builds faster when using Windows Defender antivirus)
* Qt source tree: D:\qt\qt6\
* Qt source tree: K:\qt\android\qt6
* Build directory containing all builds: D:\qt\build\
* Build directory main Android build: K:\qt\android\android
* Main (host) build for dev branch: D:\qt\build\dev\
* Main (host) build for dev branch: K:\qt\android\host
* Visual Studio 2022 (MSVC)
* Visual Studio 2022 (MSVC)
* Don't have perl in path as it can cause hard to understand build failures
* Don't have perl in path as it can cause hard to understand build failures
* Have cmake in path
* Have cmake in path


== Setting up Qt Creator for Android ==
== Setting up Android SDK/NDK and JAVA ==


# Install Qt Creator with Android option
# 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)
# In Creator preferences, install Adoptium JDK (C:\Program Files\Eclipse Adoptium\jdk-17.0.10.7-hotspot)
# Android SDK location: C:\dev\android
# Android SDK location: C:\Utils\Android
# Select Android NDK 26.1.10909125 and make default
# Select Android NDK 26.1.10909125 and make default
# Oppenssl location: C:\dev\android\android_openssl
# Oppenssl location: C:\Utils\Android\android_openssl
# Verify Android settings:
# Verify Android settings:
[[File:Android settings 26.png]]
[[File:Android settings 26.png]]
Line 23: Line 23:
[[File:Android Emulator.png]]
[[File:Android Emulator.png]]


== Building Qt for Android on Windows ==
== Install MINGW ==
Main build root Android: D:\qt\build\android
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 <nowiki>git://code.qt.io/qt/qt5.git</nowiki> 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


Configure Qt for Android in build root using host build<blockquote>cmake -DQT_BUILD_SUBMODULES=QtMultimedia -DQT_HOST_PATH=D:/qt/build/dev/qtbase -DQT_BUILD_TESTS_BY_DEFAULT=OFF -DQT_BUILD_TESTS=ON -DANDROID_PLATFORM=android-33 -DQT_USE_TARGET_ANDROID_BUILD_DIR=TRUE -DQT_QMAKE_TARGET_MKSPEC=android-clang -DANDROID_SDK_ROOT=C:/dev/android -DANDROID_NDK_ROOT=C:/dev/android/ndk/26.1.10909125 -DANDROID_ABI=x86_64 -DQT_BUILD_EXAMPLES=FALSE -DCMAKE_BUILD_TYPE=Debug -DINPUT_developer_build=yes --fresh -G Ninja D:/qt/qt6 & ninja</blockquote>Main build directory for Qt Multimedia on Android: D:\qt\build\androidmultimedia
== Building Qt for Android on Windows ==
This build setup works with my Samsung Galaxy S6 tablet


Configure Qt Multimedia for Android <blockquote>cmake-DCMAKE_TOOLCHAIN_FILE=D:\qt\build\android\qtbase\lib\cmake\qt6\qt.toolchain.cmake -G Ninja  -DQT_USE_ORIGINAL_COMPILER=ON -DQT_BUILD_TESTS=ON -DQT_BUILD_TESTS_BY_DEFAULT=OFF D:/qt/qt6/qtmultimedia & ninja</blockquote>
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 ==
== Importing Qt Multimedia build into QtCreator ==
Line 36: Line 56:
# 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 D:\qt\build\androidmultimedia
# Import build from K:\qt\android\qtmultimedia
#* This creates a Android Qt 6.8.0 (android) Clang x86_64 kit
#* This creates a Android Qt 6.9.0 (android) Clang arm64-v8a
#* Configure is run automatically again
#* Press 'Configure' button
# Select a test to be built (tst_qmediadevices) and choose a corresponding emulator in project build settings for Android kit
# Connect the Android device and go to Edit->Preferences->Devices, select Android tab, and make sure that configuration does not show any errors.  
# Build target tst_qmediadevices
# Select the project to build, and make sure the correct Android device is selected[[File:Image.png|thumb]]
# Observe error message:
 
<blockquote>19:15:12: The process "C:\Program Files\CMake\bin\cmake.exe" exited normally.
 
19:15:12: Starting: "D:\qt\build\dev\qtbase\bin\androiddeployqt.exe" --input D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-tst_qmediadevices-deployment-settings.json --output D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-build --android-platform android-33 --jdk "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot" --gradle
 
Cannot find application binary in build dir D:/qt/build/androidmultimedia/tests/auto/unit/multimedia/qmediadevices/android-build//libs/x86_64/libtst_qmediadevices_x86_64.so.
 
19:15:12: The process "D:\qt\build\dev\qtbase\bin\androiddeployqt.exe" exited with code 2.
 
Error while building/deploying project QtMultimedia (kit: Android Qt 6.8.0 (android) Clang x86_64)
 
When executing step "Build Android APK"


19:15:12: Elapsed time: 01:05.</blockquote>
== Building FFmpeg for Android ==
See [[QtMultimedia_on_Android]]

Latest revision as of 22:23, 11 August 2024

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

Building FFmpeg for Android

See QtMultimedia_on_Android