基于 Qt 的 android 应用程序在一台特定设备上启动时崩溃。 “dlopen 失败:libqtforandroid”

Posted

技术标签:

【中文标题】基于 Qt 的 android 应用程序在一台特定设备上启动时崩溃。 “dlopen 失败:libqtforandroid”【英文标题】:Qt based android application is crashing during startup on one specific device. "dlopen failed: libqtforandroid" 【发布时间】:2019-11-12 01:57:57 【问题描述】:

我的应用程序在启动时仅在一台特定设备上崩溃:华为平板电脑 AGS2-W09。 Qt 5.12.3。

我有一个来自设备的 logcat 转储:

07-01 10:53:09.327  6135  6156 E androidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: file offset for the library "/data/data/pl.domain.appname/qt-reserved-files/plugins/platforms/android/libqtforandroid.so" >= file size: 0 >= 0
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at java.lang.Runtime.load0(Runtime.java:928)
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at java.lang.System.load(System.java:1624)
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at org.qtproject.qt5.android.QtNative$2.run(QtNative.java:183)
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at org.qtproject.qt5.android.QtThread$2.run(QtThread.java:87)
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
07-01 10:53:09.327  6135  6156 E AndroidRuntime:    at java.lang.Thread.run(Thread.java:784)
07-01 10:53:09.330  1184  1922 W ActivityManager:   Force finishing activity pl.domain.appname/.AppActivity

接下来我该怎么做才能找到问题?

【问题讨论】:

您是否将 Qt 正确部署到设备上。设备Android版本是否与您使用的Qt版本兼容。 问题已经解决。真正的问题是 Android ABI 政策的最新变化。错误信息具有误导性。应用找不到arm64库,用v8a工具链编译解决了问题。 @Rajju,既然你已经解决了这个问题,请在答案部分自己回答这个帖子。然后,您可以将其标记为答案。 【参考方案1】:

问题解决了。如果您遇到类似的问题,那是因为您试图在 64 位设备上运行 32 位应用程序。 Qt 还不支持 AAB,所以需要分别编译 32 位(armeabi v7a)和 64 位(armeabi v8a)。

【讨论】:

以上是关于基于 Qt 的 android 应用程序在一台特定设备上启动时崩溃。 “dlopen 失败:libqtforandroid”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 和 Android 的给定时间检测用户是不是仅在一台设备上处于活动状态

“App not not installed”在一台设备上

QT 使用 MinGW 启用交叉编译(预编译)

如何在一台完全离线的电脑上安装Android studio开发环境

iOS - 在一台设备上支持多个用户帐户的应用中的可更新应用内购买

为啥 Spring 在一台机器上而不是另一台机器上出现循环依赖问题?