我正在使用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的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">
我的第一个问题的项目中没有最后一步。