Решил посмотреть, как обстоят дела сейчас у Qt с возможностью компиляции под Андроид в среде Linux. Везде читаю что взят курс на мобильность, поэтому решил развернуть свежее программное обеспечение. Все делаю на Debian 9 Stable 64bit.
Установил Qt с официального сайта:
Qt 5.9.2 (64 bit)
QtCreator 4.4.1
Установил JDK:
jdk1.8.0_152
Установил Android SDK и NDK:
build-tools;27.0.1 | 27.0.1 | Android SDK Build-Tools 27.0.1 | build-tools/27.0.1/
emulator | 26.1.4 | Android Emulator | emulator/
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/
platform-tools | 26.0.2 | Android SDK Platform-Tools | platform-tools/
platforms;android-27 | 1 | Android SDK Platform 27 | platforms/android-27/
tools | 26.0.1 | Android SDK Tools 26.0.1 | tools/
Процесс установки инструментария под Android я записал в статье: Как в среде разработки Qt 5.9 включить поддержку Android.
Проблема 1
Не работает компиляция под Android в режиме отладки (странно, но в режиме релиза компиляция идет, формируется apk, и он даже работает если вручную залить на устройство). Выдаются следующие ошибки:
16:30:41: Запускается: «/usr/bin/make»
/opt/android/android-ndk-r16/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -c -D__ANDROID_API__=16 --sysroot=/opt/android/android-ndk-r16/sysroot -isystem /opt/android/android-ndk-r16/sysroot/usr/include/arm-linux-androideabi -isystem /opt/android/android-ndk-r16/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /opt/android/android-ndk-r16/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -fstack-protector-strong -DANDROID -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-builtin-memmove -g -g -marm -O0 -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I. -I/opt/qt_5_9_2/5.9.2/android_armv7/include -I/opt/qt_5_9_2/5.9.2/android_armv7/include/QtQuick -I/opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui -I/opt/qt_5_9_2/5.9.2/android_armv7/include/QtQml -I/opt/qt_5_9_2/5.9.2/android_armv7/include/QtNetwork -I/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore -I. -I/opt/qt_5_9_2/5.9.2/android_armv7/mkspecs/android-g++ -o main.o main.cpp
In file included from /opt/android/android-ndk-r16/sources/cxx-stl/gnu-libstdc++/4.9/include/type_traits:35:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qglobal.h:45,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qtguiglobal.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/android/android-ndk-r16/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^
In file included from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qglobal.h:98:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qtguiglobal.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qcompilerdetection.h:567:6: error: #error Qt requires a C++11 compiler and yours does not seem to be that.
# error Qt requires a C++11 compiler and yours does not seem to be that.
^
In file included from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qatomic.h:46:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qglobal.h:1158,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qtguiglobal.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qbasicatomic.h:61:4: error: #error "Qt requires C++11 support"
# error "Qt requires C++11 support"
^
In file included from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qstring.h:48:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qcoreapplication.h:44,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:44,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qchar.h:587:1: warning: identifier 'nullptr' is a keyword in C++11 [-Wc++0x-compat]
Q_DECL_CONSTEXPR inline bool operator!=(QChar lhs, std::nullptr_t) Q_DECL_NOTHROW { return !operator==(lhs, nullptr); }
^
In file included from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qobjectdefs.h:50:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qobject.h:46,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qcoreapplication.h:46,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:44,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qobjectdefs_impl.h:339:9: warning: identifier 'decltype' is a keyword in C++11 [-Wc++0x-compat]
template <typename F> static auto test(F f) -> decltype(((f.operator()((dummy<ArgList>())...)), int()));
^
In file included from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qtguiglobal.h:43:0,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/qguiapplication.h:43,
from /opt/qt_5_9_2/5.9.2/android_armv7/include/QtGui/QGuiApplication:1,
from main.cpp:51:
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qglobal.h:927:23: error: expected ',' or '...' before '&&' token
void qAsConst(const T &&) Q_DECL_EQ_DELETE;
^
/opt/qt_5_9_2/5.9.2/android_armv7/include/QtCore/qglobal.h:938:25: error: expected ',' or '...' before '&&' token
QForeachContainer(T &&t) : c(std::move(t)), i(qAsConst(c).begin()), e(qAsConst(c).end()) {}
Вот. Что с этим можно поделать? Как скомпилировать, как отлаживаться хотя бы на реальном устройстве? Отладка по USB на устройстве включена.
Проблема 2
Не работает создание/добавление AVD устройств. Вроде вот тут ее обсудили:
https://forum.qt.io/topic/83476/android-build-sdk-not-defined-check-android-s...
и модератор сообщил что болт, исправлять будем в Qt Creator 4.5. Но я хотел бы узнать, может у кого-то работает эмуляция в данной конфигурации и такой проблемы нет? А если есть, то какие на данный момент рабочие и самые свежие версии Qt и QtCreator, на которых можно работать с Android?
Кратко, ситуация такая: на реальном Android-устройстве отлаживаться невозможно, а Android-виртуалки невозможно запустить. Какой-то очень странный «курс на мобильность».