Russian Qt Forum
Ноябрь 22, 2024, 18:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Компиляция и запуск стандартного примера Dashboard под Android  (Прочитано 3921 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Ноябрь 19, 2017, 16:59 »

Решил посмотреть, как обстоят дела сейчас у Qt с возможностью компиляции под Андроид в среде Linux. Везде читаю что взят курс на мобильность, поэтому решил развернуть свежее программное обеспечение.

Установил 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-settings-qt-5-9-1-qtcreator-4-4-0-with-android-studio/6

и модератор сообщил что болт, исправлять будем в Qt Creator 4.5. Но я хотел бы узнать, может у кого-то работает эмуляция в данной конфигурации и такой проблемы нет? А если есть, то какие на данный момент рабочие и самые свежие версии Qt и QtCreator, на которых можно работать с Android?

Кратко, ситуация такая: на реальном Android-устройстве отлаживаться невозможно, а Android-виртуалки невозможно запустить. Какой-то очень странный "курс на мобильность".
« Последнее редактирование: Ноябрь 19, 2017, 19:16 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #1 : Ноябрь 19, 2017, 19:10 »

Так, проблема с отладкой решилась.

Сборка будет работать, если добавить в *.pro-файл:

Код:
QMAKE_CXXFLAGS += -std=c++11

Отладка заработает, если на устройстве настроить две опции:

1. Включить опцию "Отладка по USB"
2. Выключить опцию "Мониторинг приложений, установленных через ADB". Потому что описание этой опции такое: "Запрашивать подтверждение пользователя при установке через ADB".

Вопрос про неработоспособность AVD остается в силе.
Записан

Собираю информацию по крупицам
http://webhamster.ru
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #2 : Ноябрь 20, 2017, 10:21 »

Вопрос про неработоспособность AVD остается в силе.

а советы из указанного форма не помогают ?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Ноябрь 20, 2017, 11:17 »

Код:
QMAKE_CXXFLAGS += -std=c++11
Попробуй лучше
Код:
CONGIG += c++11
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.