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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание компонента расширения QML под android  (Прочитано 9619 раз)
alexorleon
Гость
« : Апрель 15, 2016, 09:33 »

Добрый день камрады! Помогите разобраться.

Создал новое приложение Qt Quick и пытаюсь для него собрать пример QML Plugin Example (http://doc.qt.io/qt-5/qtqml-qmlextensionplugins-example.html). Для Ubuntu разобрался, собрал, установил, привязал. Все работает.
Теперь пытаюсь этот плагин собрать под android.

Нажимаю "Собрать проект". Создался каталог build-qmlextensionplugins-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Debug с файлами:
android-build
imports
Makefile
plugin.moc
plugin.o

Но в консоли сборки ошибка "Не найден файл .pro приложения, APK не собирается."

При попытке "Запустить" сыпятся ошибки.
Не удалось найти Json файл androiddeploy.
Ошибка при сборке/установке проекта qmlextensionplugins (комплект: Android для armeabi-v7a (GCC 4.9, Qt 5.6.0) )
Во время выполнения этапа «Установка на устройство Android»

Физическое устройство Hugerock T70V2. Обычные приложения запускаются, так что планшет рабочий.
Ubuntu x64, Qt 5.6.0.

Пробовал добавить QT -= gui. Не помогло.
Даже не знаю куда копать. Кто-нибудь собирал статическую библиотеку под android?
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Апрель 15, 2016, 13:33 »

Минимальный проект с проблемой выложите, чтобы можно было попробовать.
Записан

Гугль в помощь
alexorleon
Гость
« Ответ #2 : Апрель 18, 2016, 07:51 »

Минимальный проект с проблемой выложите, чтобы можно было попробовать.

Проблема не в проекте, а в примере из поставки Qt ( QML Plugin Example ). http://doc.qt.io/qt-5/qtqml-qmlextensionplugins-example.html
Он есть в примерах. До проекта даже дело не доходит, его не получается собрать под android.

Думал может кто-то пробовал его подключить к проекту.
Записан
alexorleon
Гость
« Ответ #3 : Апрель 18, 2016, 13:06 »

Создал проект Qt Quick и назвал TestAndroidPlugin.
В файле main.qml текст из примера:
Код:
import QtQuick 2.6
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
import TimeExample 1.0 // import types from the plugin

ApplicationWindow {
    visible: true
    width: 640
    height: 480

    Clock { // this class is defined in QML (imports/TimeExample/Clock.qml)

        Time { // this class is defined in C++ (plugin.cpp)
            id: time
        }

        hours: time.hour
        minutes: time.minute
    }

    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}
В main.cpp добавил:
Код:
engine.addImportPath(QStringLiteral("/home/user/QtProjects/TestAndroidPlugin/imports"));
Собрал, запустил QML Plugin Example. Он попросил qml файл, указал на Clock.qml. Плагин готов. Скопировал каталог imports из /opt/Qt/Examples/Qt-5.6/qtdeclarative/qml/qmlextensionplugins в /home/user/QtProjects/TestAndroidPlugin. И скопировал /home/user/QtProjects/build-qmlextensionplugins-Desktop_Qt_5_6_0_GCC_64bit-Debug/imports/TimeExample/libqmlqtimeexampleplugin.so в TimeExample проекта TestAndroidPlugin.
Запускаем TestAndroidPlugin под desktop, все работает, часики идут.

А вот под android куча ошибок.
Пробую собрать QML Plugin Example. Консоль показывает Не найден файл .pro приложения, APK не собирается. Ну и ладно, APK тут и не нужен. Главное .so создался. И размер у него 512 kB против 38 kB десктопа. Произвожу те же манипуляции с копированием.
Пробую запустить.
В консоли:
Warning: QML import could not be resolved in any of the import paths: TimeExample
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtils
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtils


17:01:34: Ошибка создания пакета: Команда «/opt/android-sdk-linux/platform-tools/adb -s E9AZCY06U405 pull /system/bin/app_process32 /home/user/QtProjects/build-TestAndroidPlugin-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Debug/app_process» завершилась с ошибкой.Код завершения: 1

Вывод приложения:
W/System.err(24320): java.lang.ClassNotFoundException: android.graphics.drawable.RippleDrawable
W/System.err(24320):    at java.lang.Class.classForName(Native Method)
W/System.err(24320):    at java.lang.Class.forName(Class.java:251)
W/System.err(24320):    at java.lang.Class.forName(Class.java:216)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.getClass(ExtractStyle.java:388)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.<init>(ExtractStyle.java:92)
W/System.err(24320):    at org.qtproject.qt5.android.QtActivityDelegate.loadApplication(QtActivityDelegate.java:511)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.loadApplication(QtActivity.java:245)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.startApp(QtActivity.java:655)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.onCreate(QtActivity.java:901)
W/System.err(24320):    at android.app.Activity.performCreate(Activity.java:5411)
W/System.err(24320):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
W/System.err(24320):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
W/System.err(24320):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
W/System.err(24320):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
W/System.err(24320):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
W/System.err(24320):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(24320):    at android.os.Looper.loop(Looper.java:149)
W/System.err(24320):    at android.app.ActivityThread.main(ActivityThread.java:5257)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
W/System.err(24320):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
W/System.err(24320):    at dalvik.system.NativeStart.main(Native Method)
W/System.err(24320): Caused by: java.lang.NoClassDefFoundError: android/graphics/drawable/RippleDrawable
W/System.err(24320):    ... 25 more
W/System.err(24320): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.graphics.drawable.RippleDrawable" on path: DexPathList[[zip file "/data/app/org.qtproject.example.TestAndroidPlugin-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.qtproject.example.TestAndroidPlugin-1, /vendor/lib, /system/lib, /system/lib/arm]]
W/System.err(24320):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
W/System.err(24320):    ... 25 more
W/System.err(24320): java.lang.ClassNotFoundException: android.graphics.drawable.AnimatedStateListDrawable
W/System.err(24320):    at java.lang.Class.classForName(Native Method)
W/System.err(24320):    at java.lang.Class.forName(Class.java:251)
W/System.err(24320):    at java.lang.Class.forName(Class.java:216)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.getClass(ExtractStyle.java:388)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.<init>(ExtractStyle.java:93)
W/System.err(24320):    at org.qtproject.qt5.android.QtActivityDelegate.loadApplication(QtActivityDelegate.java:511)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.loadApplication(QtActivity.java:245)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.startApp(QtActivity.java:655)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.onCreate(QtActivity.java:901)
W/System.err(24320):    at android.app.Activity.performCreate(Activity.java:5411)
W/System.err(24320):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
W/System.err(24320):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
W/System.err(24320):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
W/System.err(24320):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
W/System.err(24320):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
W/System.err(24320):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(24320):    at android.os.Looper.loop(Looper.java:149)
W/System.err(24320):    at android.app.ActivityThread.main(ActivityThread.java:5257)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
W/System.err(24320):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
W/System.err(24320):    at dalvik.system.NativeStart.main(Native Method)
W/System.err(24320): Caused by: java.lang.NoClassDefFoundError: android/graphics/drawable/AnimatedStateListDrawable
W/System.err(24320):    ... 25 more
W/System.err(24320): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.graphics.drawable.AnimatedStateListDrawable" on path: DexPathList[[zip file "/data/app/org.qtproject.example.TestAndroidPlugin-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.qtproject.example.TestAndroidPlugin-1, /vendor/lib, /system/lib, /system/lib/arm]]
W/System.err(24320):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
W/System.err(24320):    ... 25 more
W/System.err(24320): java.lang.ClassNotFoundException: android.graphics.drawable.VectorDrawable
W/System.err(24320):    at java.lang.Class.classForName(Native Method)
W/System.err(24320):    at java.lang.Class.forName(Class.java:251)
W/System.err(24320):    at java.lang.Class.forName(Class.java:216)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.getClass(ExtractStyle.java:388)
W/System.err(24320):    at org.qtproject.qt5.android.ExtractStyle.<init>(ExtractStyle.java:94)
W/System.err(24320):    at org.qtproject.qt5.android.QtActivityDelegate.loadApplication(QtActivityDelegate.java:511)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.loadApplication(QtActivity.java:245)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.startApp(QtActivity.java:655)
W/System.err(24320):    at org.qtproject.qt5.android.bindings.QtActivity.onCreate(QtActivity.java:901)
W/System.err(24320):    at android.app.Activity.performCreate(Activity.java:5411)
W/System.err(24320):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
W/System.err(24320):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
W/System.err(24320):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
W/System.err(24320):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
W/System.err(24320):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
W/System.err(24320):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(24320):    at android.os.Looper.loop(Looper.java:149)
W/System.err(24320):    at android.app.ActivityThread.main(ActivityThread.java:5257)
W/System.err(24320):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(24320):    at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err(24320):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
W/System.err(24320):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
W/System.err(24320):    at dalvik.system.NativeStart.main(Native Method)
W/System.err(24320): Caused by: java.lang.NoClassDefFoundError: android/graphics/drawable/VectorDrawable
W/System.err(24320):    ... 25 more
W/System.err(24320): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.graphics.drawable.VectorDrawable" on path: DexPathList[[zip file "/data/app/org.qtproject.example.TestAndroidPlugin-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.qtproject.example.TestAndroidPlugin-1, /vendor/lib, /system/lib, /system/lib/arm]]
W/System.err(24320):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
W/System.err(24320):    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
W/System.err(24320):    ... 25 more
W/ResourceType(24320): Skipping entry 0x1060087 in package table 0 because it is not complex!


W/libTestAndroidPlugin.so(24320): (null):0 ((null)): QQmlApplicationEngine failed to load component
W/libTestAndroidPlugin.so(24320): (null):0 ((null)): qrc:/main.qml:5 module "TimeExample" is not installed
W/libTestAndroidPlugin.so(24320):


Экран планшета само собой черный.
Есть идеи?
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #4 : Апрель 18, 2016, 20:05 »

Вангую, что это что-то в районе несоответствия минимального SDK..

Говорит что класс drawable.RippleDrawable не найден, соответственно в указанной версии SDK его похоже нет, надо пробовать более позднюю версию Android SDK

Попробуй targetSdkVersion 21, minSdkVersion 10
« Последнее редактирование: Апрель 18, 2016, 20:09 от navrocky » Записан

Гугль в помощь
alexorleon
Гость
« Ответ #5 : Апрель 19, 2016, 11:35 »

Попробуй targetSdkVersion 21, minSdkVersion 10
А вангуешь то походу в правильном направлении)

Было <uses-sdk android:targetSdkVersion="16" android:minSdkVersion="14"/>
Попробовал с android:targetSdkVersion="19". Не помогло.
Загрузил Android 5.0.1 (API 21). Т.к. у меня нет 5-го, создал виртуальное (AVD.png). Проверил, запускается.
Чтобы не было ошибки Error sh: 1 glxinfo not found поставил это sudo apt-get install mesa-utils

Изменил <uses-sdk android:targetSdkVersion="21" android:minSdkVersion="14"/>
Для проекта выставил сборочный SDK новый android-21.

Запуск и установка.
Консоль:
Warning: QML import could not be resolved in any of the import paths: TimeExample
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtils
Warning: QML import could not be resolved in any of the import paths: QtQuick.Extras.Private.CppUtils


Android package built successfully in 12,432 ms.
  -- It can now be run from the selected device/emulator.
  -- File: /home/alexorleon/QtProjects/build-TestAndroidPlugin-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Debug/android-build//bin/QtApp-debug.apk
15:01:53: Процесс «/opt/Qt/5.6/android_armv7/bin/androiddeployqt» завершился успешно.
15:01:53: Загрузка файлов, необходимых для отладки.
15:01:53: Установка пакета: Выполнение команды «/opt/android-sdk-linux/platform-tools/adb -s emulator-5554 pull /system/bin/app_process32 /home/user/QtProjects/build-TestAndroidPlugin-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Debug/app_process».
15:01:53: Установка пакета: Выполнение команды «/opt/android-sdk-linux/platform-tools/adb -s emulator-5554 pull /system/lib/libc.so /home/user/QtProjects/build-TestAndroidPlugin-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Debug/libc.so».
15:01:53: Прошло времени: 00:21.


Вывод приложения:
Ура, ошибки пропали!

Запуск внешнего процесса.I/ActivityManager(  337): Start proc de.stefanfrings.ioModule for activity de.stefanfrings.ioModule/org.qtproject.qt5.android.bindings.QtActivity: pid=1396 uid=10053 gids={50053, 9997, 3003, 1028, 1015} abi=armeabi-v7a
I/art     ( 1396): Not late-enabling -Xcheck:jni (already on)
I/Qt      ( 1396): qt start
D/        ( 1396): (null):0 ((null)): QML debugging is enabled. Only use this in a safe environment.
I/Choreographer( 1396): Skipped 41 frames!  The application may be doing too much work on its main thread.
D/gralloc_goldfish( 1396): Emulator without GPU emulation detected.
W/libTestAndroidPlugin.so( 1396): (null):0 ((null)): QQmlApplicationEngine failed to load component
W/libTestAndroidPlugin.so( 1396): (null):0 ((null)): qrc:/main.qml:5 module "TimeExample" is not installed
W/libTestAndroidPlugin.so( 1396):


Экран черный. Осталось понять куда положить module "TimeExample".
Указать какой-то каталог в engine.addImportPath как для десктопа или для андроида где-то в другом месте задается?
Кстати еще вот такая ошибка (gdb.png). Пробовал ставить другой NDK, не помогло.
Записан
alexorleon
Гость
« Ответ #6 : Апрель 20, 2016, 08:25 »

По поводу ошибок Didn't find class "android.graphics.drawable.RippleDrawable" натолкнулся на это https://bugreports.qt.io/browse/QTBUG-43266.
Причем так и не ясно, правильно ли сделали, что закрыли репорт. Но раз пишут не обращать внимания на эти ошибки, продолжу работать с реальным устройством 4.4.2.

К сожалению так и не нашел куда какие адреса вписывать.
W/libTestAndroidPlugin.so( 1396): (null):0 ((null)): QQmlApplicationEngine failed to load component
W/libTestAndroidPlugin.so( 1396): (null):0 ((null)): qrc:/main.qml:5 module "TimeExample" is not installed
W/libTestAndroidPlugin.so( 1396):
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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