Хорошо, поэтому я перезапустил все с scracth с установкой fre sh ubuntu 18.04. Я снова все настроил. Несколько точностей:
Я получил последний cmake с привязкой, apt установил переднюю версию, которая выдавала некоторые предупреждения или ошибки.
Я все еще Я использовал последние версии Qt, Android Sdk и Ndk, и я работал с ndk, который можно загрузить через менеджер Sdk Android Studio.
Сейчас предыдущая ошибка исчезла, но на этом этапе проблема все еще была. Мне пришлось скачать extra-cmake-modules и установить его отдельно, чтобы cmake выполнил свою работу (именно это установило файлы в /usr/local/share/ECM
). На данный момент все строится без ошибок. Более того, Qt может развертывать android приложений из нескольких предварительно написанных android -страиваемых примеров, которые он предлагает.
Однако некоторые проблемы остаются.
- Первая из все, при попытке развернуть самое простое мраморное приложение, последнее сразу вылетает после установки на мое устройство. Я должен также упомянуть, что я прошел весь процесс сборки / установки, нацеленный на android платформу 29, 28 (на котором работает мой телефон) и 27, потому что я прочитал это начиная с android платформы 28, Google пожелает разработчику широко использовать его API-интерфейсы publi c и, как следствие, аварийно завершать работу приложений, пытающихся вызвать функции частных API-интерфейсов. Сообщение об ошибке кажется совместимым с этим объяснением. Вот минимальный код:
qmake
TEMPLATE = app
CONFIG += qt
QT += gui \
widgets
SOURCES += \
main.cpp
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
INCLUDEPATH += /home/dasha/marble/export/include
DEPENDPATH += /home/dasha/marble/export/include
LIBS += /home/dasha/marble/export/lib/libastro_armeabi-v7a.so \
/home/dasha/marble/export/lib/libKF5Kirigami2_armeabi-v7a.so \
/home/dasha/marble/export/lib/libmarbledeclarative_armeabi-v7a.so \
/home/dasha/marble/export/lib/libmarblewidget-qt5_armeabi-v7a.so
main. cpp
#include <QApplication>
#include <marble/MarbleWidget.h>
#include <marble/MarbleDirs.h>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
// Set Paths
Marble::MarbleDirs::setMarblePluginPath("/home/dasha/marble/export/plugins");
Marble::MarbleDirs::setMarbleDataPath("home/dasha/marble/export/data");
// Load Marble using OpenStreetMap in Mercator projection
Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget;
mapWidget->setProjection(Marble::Mercator);
mapWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
mapWidget->setWindowTitle("Hello Marble!");
mapWidget->show();
return app.exec();
}
Несколько строк в каждой части огромного сообщения об ошибке
I .example.test_: Late-enabling -Xcheck:jni
W System : ClassLoader referenced unknown path:
D PhoneWindow: windowLightStatusBar : false, disable View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
D OpenGLRenderer: Skia GL Pipeline
I QtCore : Start
I Qt : qt started
W .example.test_: Accessing hidden field Landroid/R$styleable;->ViewDrawableStates:[I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->View_background:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->View_padding:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->View_paddingLeft:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->View_paddingTop:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->View_paddingRight:I (light greylist, reflection)
W System.err: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
W System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
W System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
W System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
W System.err: at android.os.Looper.loop(Looper.java:205)
W System.err: at android.app.ActivityThread.main(ActivityThread.java:6991)
W System.err: at java.lang.reflect.Method.invoke(Native Method)
W System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:884)
W .example.test_: Accessing hidden field Landroid/R$styleable;->SeekBar:[I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->SeekBar_thumb:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->SeekBar_thumbOffset:I (light greylist, reflection)
W .example.test_: Accessing hidden field Lcom/android/internal/R$attr;->switchStyle:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->Switch:[I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->LinearLayout_divider:I (light greylist, reflection)
W .example.test_: Accessing hidden field Landroid/R$styleable;->LinearLayout_showDividers:I (light greylist, reflection)
W .example.test_: Accessing hidden field
Landroid/R$styleable;->LinearLayout_dividerPadding:I (light greylist, reflection)
E AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread
E AndroidRuntime: Process: org.qtproject.example.test_3, PID: 31374
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libastro_armeabi-v7a.so" not found
E AndroidRuntime: at java.lang.Runtime.load0(Runtime.java:928)
E AndroidRuntime: at java.lang.System.load(System.java:1633)
E AndroidRuntime: at org.qtproject.qt5.android.QtNative$4.run(QtNative.java:275)
E AndroidRuntime: at org.qtproject.qt5.android.QtThread$2.run(QtThread.java:87)
E AndroidRuntime: at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
I Process : Sending signal. PID: 31374 SIG: 9
"org.qtproject.example.test_3" died.
И кажется, что некоторая библиотека не была "экспортирована" и не может быть открыта (libastro
) ... Еще одно замечание: добавление этих двух строк в основном. cpp удаляет все сообщения об ошибках, но приложение все равно вылетает.
Marble::MarbleDirs::setMarblePluginPath("/home/dasha/marble/export/plugins");
Marble::MarbleDirs::setMarbleDataPath("home/dasha/marble/export/data");
- Во-вторых, при попытке построить apk, как указано в конце руководства, я получаю следующая ошибка при запуске
~/marble/sources/src/apps/marble-maps/create-apk.py --target MarbleMaps.apk ../export
из ~/marble/sources
:
Cannot find ../export/share/deploy-marble-maps.json. Is ../export really a Marble Android installation?
Я не знаю, почему этот файл не был установлен, хотя я могу найти deploy-behaim.json
в указанной папке .. .
Я мог бы попытаться установить более старую версию Qt, Android Sdk и Ndk, но, скорее всего, я все равно столкнусь с другими подобными ошибками, и у меня нет времени на go через это. Эта установка слишком хлопотна для меня, я думаю, я буду go с QtLocation
et c. для моего приложения, и изучите некоторый QML, поскольку он кажется более простым и более перспективным методом. Однако если вы знаете, что происходит, пожалуйста, не стесняйтесь объяснять, что происходит не так!