Как я могу разрешить ClassNotFoundEception приложения Qt на устройстве Android? - PullRequest
0 голосов
/ 12 января 2020

Я использую Qt для Android и JNI для доступа к Android API. Это работает нормально, если я запускаю приложение в симуляторах с виртуальным устройством Android, но не на физическом устройстве Android. Это смущает.

Я разрабатываю с Qt Creator 4.11.0 на основе Qt 5.14.0 (Clang 10.0 (Apple), 64 бит). Вот трассировка стека исключения:

W System.err: java.lang.ClassNotFoundException: Didn't find class "com.myapp.launcher.worker.AppWorker" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib]]
W System.err:   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
W System.err:   at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
W System.err:   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
W System.err:   at org.qtproject.qt5.android.QtNative.startQtApplication(Native Method)
W System.err:   at org.qtproject.qt5.android.QtNative$7.run(QtNative.java:387)
W System.err:   at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
W System.err:   at java.lang.Thread.run(Thread.java:764)

Кто-нибудь есть идеи? Я предполагаю, что это не ошибка в исходном коде, но где-то еще, может быть, в настройках набора. Я использовал шаблон Qt для своего проекта.

1 Ответ

0 голосов
/ 17 января 2020

Вот мое решение:

Я создал новое приложение из шаблона Qt Creator и сравнил его с примером проекта для Qt Android:

Я делаю вывод, что мне нужно изменить файл .pro. Прежде всего мне пришлось добавить следующую строку:

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources

Затем мне пришлось заменить DISTFILES, который автоматически добавляется Qt Creator, если я создаю класс Java:

OTHER_FILES += \
    main.qml \
    android-sources/src/com/hello/android/Backend.java \
    android-sources/AndroidManifest.xml

Наконец мне пришлось отредактировать AndroidManifest.xml, который я скопировал из exmaple проекта, в режиме текстового редактора:

<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="com.hello.android.Backend" android:label="Hello Android" android:screenOrientation="unspecified">

Последний шаг не был необходим в проекте моего начальный вопрос

...