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

How can I resolve a ClassNotFoundEception of Qt app on an Android device?

本文关键字:Qt 应用程序 ClassNotFoundEception Android      更新时间:2023-10-16

我正在使用 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模板。

这是我的解决方案:

我从Qt Creator的模板创建了一个新应用程序,并将其与Qt Android的示例项目进行了比较:

我的结论是,我必须修改 .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">

在我最初问题的项目中,最后一步是不必要的。