Russian Qt Forum

Qt => Qt Embedded => Тема начата: Гурман от Август 24, 2016, 16:40



Название: (РЕШЕНО) Вот и как поймать, в чём проблема?
Отправлено: Гурман от Август 24, 2016, 16:40
В Linux собираю приложение для Android с использованием плагина. Плагин тоже мой, простейший. Всё успешно собирается, для проверки собираю десктоп-версию, которая запускается в Linux. Тут работает. Архив apk включает этот плагин, для чего в проекте есть специальный ANDROID_EXTRA_LIBS +=.... Компоновка выполняется, apk создаётся, успешно переносится на планшет через USB или на эмулятор в этом же Linux. Устанавливается, начинает запускаться - и потом падает. Собирал с отладчиком - до выполнения main() не доходит, падает раньше. Проблема конечно связана с плагином, поскольку это же приложение, если собираю его без плагина, то нормально работает на планшете и в эмуляторе. Плагин является подключенным виджетом, который расположен на главном окне, и в Linux версии положен на него в дизайнере, а в Android версии собирается без поддержки дизайнера.

Вот и не понятно - как выяснить, из-за чего падает ещё до входа в main()...


Название: Re: Вот и как поймать, в чём проблема?
Отправлено: GreatSnake от Август 25, 2016, 13:42
Вот и не понятно - как выяснить, из-за чего падает ещё до входа в main()...
Если падает до main(), то 100% проблемы со статической инициализацией.
Следовательно её нужно исключить.


Название: Re: Вот и как поймать, в чём проблема?
Отправлено: Гурман от Август 25, 2016, 14:24
Вот и не понятно - как выяснить, из-за чего падает ещё до входа в main()...
Если падает до main(), то 100% проблемы со статической инициализацией.
Следовательно её нужно исключить.

Не факт. Плагин до входа в main() грузится.


Название: Re: Вот и как поймать, в чём проблема?
Отправлено: GreatSnake от Август 25, 2016, 15:09
Не факт. Плагин до входа в main() грузится.
Грузи после и увидишь.


Название: Re: Вот и как поймать, в чём проблема?
Отправлено: Гурман от Август 29, 2016, 21:46
Там не в плагине дело. Я переделал сборку, чтобы для Android вместо плагина компоновалась статическая библиотека lib***.a, и потом подшивалась к приложению. Всё равно падает. Пытаюсь запустить на планшете это приложение из терминала, может там скажет чего. Но не знаю, как это правильно сделать. Оно же запускается под Java кодом, само моё приложение - это динамическая библиотека.

В моём коде статических переменных нет. Про SVG пишут, что он вроде как в Android работает. Пытаюсь выяснить, подключение каких функций приводит к падению, но как же это всё тормозит... Даже Genymotion в нативном коде x86 в Linux работает безобразно медленно.


Название: Re: Вот и как поймать, в чём проблема?
Отправлено: Гурман от Август 30, 2016, 10:47
Фуф... Главная проблема решена, получилось то, что необходимо, но как отлавливать подобные глюки - всё равно не выяснил. Тем более, что заработало на планшете ARM с Android 4.0.3, но в эмуляторе Genymotion x86 с Android 4.1 всё равно падает. Поэтому РЕШЕНО в заголовок не вписываю.

А глюк исправился добавлением CONFIG += svg в головной проект, то есть в проект приложения, использующего плагин с SVG. То есть, в проекте плагина, использующего SVG, эта настройка разумеется есть. И в Linux на десктопе так и работает, все необходимые связи плагина при загрузке устанавливаются. Но в Android молча падает. Ни за что сам бы не догадался, если бы не нашёл в Инете пост с аналогичной проблемой еще в Necessitas. Подозреваю, что такая же фигня должна быть и для других аналогичных модулей - multimedia, xml и т.д.