我如何在Android设备上解析Qt应用的ClassNotFoundEception?

问题描述 投票:0回答:1

我正在使用Qt for Android和JNI来访问Android API。如果我在具有虚拟Android设备的模拟器中运行应用程序,但未在物理Android设备上运行该应用程序,则此方法运行良好。这很混乱。

我使用基于Qt 5.14.0(Clang 10.0(Apple),64位)的Qt Creator 4.11.0开发。这是异常的堆栈跟踪:

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模板。

android c++ qt java-native-interface classnotfoundexception
1个回答
0
投票

这是我的解决方法:

我已经从Qt Creator的模板创建了一个新应用,并将其与Qt Android的example project进行了比较:

我得出结论,我必须修改.pro文件。首先,我必须添加以下行:

ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources

然后我必须替换DISTFILES,如果我创建Java类,它会由Qt Creator自动添加:

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

最后,我必须在文本编辑器模式下编辑从exmaple项目复制的AndroidManifest.xml

<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">

我的第一个问题的项目中没有最后一步。

© www.soinside.com 2019 - 2024. All rights reserved.