When I uninstalled old NDK versions including 21.3.6528147
, QT Creator displayed this:
Category Archives: Platforms and frameworks
Configuring Android NDK version in QT Creator
Building QT 6.2.2 for Windows and Android
I downloaded QT 6.2.2, verified its checksum:
certutil -hashfile qt-everywhere-src-6.2.2.zip MD5
Building for Windows with MSVC2019
Configured QT for building in the system Command Prompt (but not in MSVC Developer Command Prompt) as follows:
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
set "CMAKE_ROOT=E:\PFiles\cmake-3.21.3-windows-x86_64\bin"
set "NINJA_ROOT=E:\PFiles\ninja-win"
set "PERL_ROOT=E:\PFiles\Strawberry\perl\bin"
set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=E:\PFiles\Python35;%PATH%
rem Check if the tools are in PATH
where perl.exe
where python.exe
where cmake.exe
where ninja.exe
set "MY_INSTALL_PATH=E:\Qt\Qt6.2.2\windows"
set CL=/MP
configure.bat -prefix %MY_INSTALL_PATH% -DQT_NO_EXCEPTIONS=1 -debug-and-release -force-debug-info -platform win32-msvc -opensource -confirm-license ^
-opengl es2 -I "C:\Program Files\OpenSSL\include" -L "C:\Program Files\OpenSSL\lib"
Building QT 6.2 for Android on Windows
First I built QT 6.2 for Windows then I installed JDK8, CMake 3.21.3 and configured QT as follows:
set "CMAKE_ROOT=E:\PFiles\cmake-3.21.3-windows-x86_64\bin"
set "NINJA_ROOT=E:\PFiles\ninja-win"
set "JDK_ROOT=C:\Program Files\Java\jdk1.8.0_301\bin"
set "MINGW_ROOT=E:\PFiles\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin"
set "PERL_ROOT=E:\PFiles\Strawberry\perl\bin"
set PATH=C:\WINDOWS\system32;C:\WINDOWS
set PATH=%CMAKE_ROOT%;%PATH%
set PATH=%NINJA_ROOT%;%PATH%
set PATH=%JDK_ROOT%;%PATH%
set PATH=%MINGW_ROOT%;%PATH%
set PATH=%PERL_ROOT%;%PATH%
set PATH=E:\PFiles\Python35;%PATH%
rem Check if the tools are in PATH
where gcc
where mingw32-make.exe
where perl.exe
where javac.exe
where python.exe
where cmake.exe
where ninja.exe
set "ANDROID_SDK_ROOT=C:\Users\D-Ef\AppData\Local\Android\Sdk"
set "ANDROID_NDK_PATH=C:\Users\D-Ef\AppData\Local\Android\Sdk\ndk\21.3.6528147"
rem See qtbase\mkspecs\android-clang\qmake.conf
set "ANDROID_NDK_PLATFORM=android-23"
rem see %ANDROID_SDK_ROOT%\build-tools folder
set "ANDROID_BUILD_TOOLS_REVISION=29.0.2"
set MY_INSTALL_PATH=E:\Qt\Qt6.2\android
set QT_HOST_PATH=E:\Qt\Qt6.2\windows
configure.bat -platform android-clang -prefix %MY_INSTALL_PATH% -android-sdk %ANDROID_SDK_ROOT% -android-ndk %ANDROID_NDK_PATH% -qt-host-path %QT_HOST_PATH% -android-abis x86_64 ^
-DQT_NO_EXCEPTIONS=1 -release -force-debug-info -opensource -confirm-license
How I fixed “CMake configuration has no path to C++ compiler” in QT Creator
CMake
did not work and there was a yellow triangle at the left side of MSVC2019 kit name:
I fixed this buy changing C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat
with C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsx86_arm64.bat
.
Using QML_ELEMENT with CMake
There is an example of using QML_ELEMENT
in qt5\qtdeclarative\examples\quick\scenegraph\openglunderqml
and qt_add_qml_module
in CMake
:
qt_add_qml_module(openglunderqml
URI OpenGLUnderQML
VERSION 1.0
QML_FILES main.qml
RESOURCE_PREFIX /scenegraph/openglunderqml
NO_RESOURCE_TARGET_PATH
)
In QML
it imports the module:
import OpenGLUnderQML 1.0
Building QT 6.2 for Windows with MSVC2019
I cloned QT repository:
git clone --recursive https://code.qt.io/qt/qt5.git --branch v6.2.0
cd qt5
Looks like the command below is not required:
./init-repository --module-subset=all
because it prints:
Will not reinitialize already initialized repository (use -f to force)!
QtPurchasing uses deprecated AIDL billing library
Looks like QtPurchasing uses deprecated AIDL billing library and people say that it crashes on some devices. See https://developer.android.com/google/play/billing/deprecation-faq for more information. Probably they are going to update it in 5.15.7 and move it into examples in QT 6, so it is not clear exactly what will happen with it, we probably better wait QT 5.15.7 to be released.
(more…)Invokable constructor in QT
In QT 5.15 I declare a class with an invokable constructor:
class TestClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE TestClass(QString val) {}
};
Q_DECLARE_METATYPE(TestClass*)
register its type:
qRegisterMetaType<TestClass*>();
‘Invalid UTF-8 code encountered.’ close reason with QWebSocket
I get close reason: ‘Invalid UTF-8 code encountered.’ (code=1007) with QWebSocket
in the following scenario:
- I connect to
Binance
streamwss://stream.binance.com:9443/stream
withQWebSocket::open
. - Successfully receive messages for some time period (a few hours).
Binance
disconnects me when its servers load increases (because I have low-priority API) and I get close reason code=1000 that indicates a normal closure.- Try to reconnect multiple times by calling
QWebSocket::open
again, butBinance
closes the connection with close reason ‘Invalid UTF-8 code encountered.’ (code=1007) that indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). - Restart the application manually and connect successfully.
The difficulty of reproducing the bug is that Binance
disconnects me rarely (once a day, for example) and experimentation with disconnecting the network cable from my machine does not have this effect, after I connect the cable back, QWebSocker
reconnects successfully. When I disconnect the network cable I get Error: ‘Unknown error’ (code=-1), Close reason: ” (code=1000).
Built my QT app for Android with API level 30 (Android 11)
New Android App Bundle and target API level requirements in 2021:
Starting August 2021, new apps will be required to target API level 30 (Android 11) and use the Android App Bundle publishing format. Starting November 2021, all app updates will be required to target API level 30 (Android 11). Apps with a download size of more than 150 MB are now supported by Play Asset Delivery and Play Feature Delivery.
I updated the manifest manually as follows:
<?xml version="1.0"?>
<manifest package="net.geographx.LinesGame" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="2.5.30" android:versionCode="161" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30"/>