QtCompile icon indicating copy to clipboard operation
QtCompile copied to clipboard

不好意思,我又来提bug了~~

Open leamus opened this issue 5 months ago • 39 comments

说来话长,我只在用Qt5.15.2的安卓开发环境,最近想给引擎加个二维码扫描功能,找了三方开源库,发现QZXing挺不错,就加了进去,没想到有个问题: win下完全正常,安卓下armeabi-v7a正常,arm64-v8a的应用,只要一解析就报错闪退: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x6e6b63db00 in tid 24061 (Thread (pooled)), pid 23955 造成闪退的原因是,一个函数throw出exception,而调用这个函数的函数明明用try包含了但好像没get到(当然不是低级错误,比如类型错误等等),我花了大量的时间去修改和调试,无果,真的是太诡异了,主要是只有arm64-v8a会有这个问题,无论我换安卓、改用NDK其他版本编译、找了大量的fork后又修改了QZXing的源码都没解决。。。 于是想起来要不试试咱这个最新的开发环境(前面那么多废话是原因铺垫),下载、解压、配置环境、编译插件一套步骤下来后,发现上面的问题解决了,但其他问题却更大了。。。 1、QtCreator的编译安卓时,ABIs本来是armeabi-v7a arm64-v8a可以勾选,但全变成arm-linux-android-elf-32bit arm-linux-android-elf-64bit了,虽然可以用自定义步骤来重写一下,但运行真机时居然提示我的机子没有armeabi-v7a arm64-v8a架构,所以不能运行,QtCreator这种Bug我也见多了,现在我还发现两三个bug没解决,但奇怪的是之前是正常的,下载配置了咱这个安卓开发环境后突然就变成这样了。。。 2、purchasing问题依旧(只要加入就闪退)。。。 3、运行我的项目后,发现整个应用程序的大小超出了屏幕(高度超出了大概一个字的距离); 4、继续加载另一个界面(以前都是正常的),会黑屏,看日志报错: W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483641 W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483640 W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483639 W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483611 (这几个错误会一直弹) ,再加载其他界面,会有报错: qrc:/QML/menu.qml:664:5: Type Dialog1.FileDialog unavailable, qrc:/android_rcc_bundle/qml/QtQuick/Dialogs/DefaultFileDialog.qml: No such file or directory 不知道是不是咱这个版本把 QtQuick.Dialogs 去掉了还是怎么(应该不是,因为PC版的Qt5.15.12是正常的,所以目前完全用不了了。。。 哦对了,NDK21和NDK23两个版本我都试了,错误一致。

leamus avatar Feb 01 '24 14:02 leamus

  1. 建议报给Qt Creator。。。。
  2. 。。。。
  3. 是不是这个 http://www.qtcn.org/bbs/read-htm-tid-91925.html
  4. QtQuick.Dialogs 肯定是有的,我可能想到的原因是ndk和Qt又双叒叕不兼容了。。。。。

Fsu0413 avatar Feb 03 '24 01:02 Fsu0413

1、给Qt官方提bug太麻烦,总是要我写个示例。。还是等下个版本吧 2、。。。。。。 3、不是,我的是QML界面,而且是超出屏幕,不是留白。。 4、官方的Qt不是一直是NDK21编译的么,我用咱NDK21也是有问题,不知有没有白嫖Qt官方编译好的bin的方法。。 QZXing的诡异bug也让我头痛,暂时先休息休息(等5.15.13出来再。。)

leamus avatar Feb 03 '24 06:02 leamus

早上不甘心,又用5.15.11试了一下,然后给我报错: W Leamus_Android: QQmlApplicationEngine failed to load component W MakerFrame: QQmlApplicationEngine failed to load component W Leamus_Android: qrc:/QML/main.qml:10:1: module "QtMultimedia" is not installed W MakerFrame: qrc:/QML/main.qml:10:1: module "QtMultimedia" is not installed 无语了。。。

leamus avatar Feb 04 '24 00:02 leamus

又重新试了5.15.10,界面起码能进去,只是很容易卡死,卡死时报错: I amus.MakerFram: Thread[3,tid=21013,WaitingInMainSignalCatcherLoop,Thread*=0x7946016400,peer=0x13980088,"Signal Catcher"]: reacting to signal 3 02-04 09:19:43.662 20998 21013 I amus.MakerFram: I amus.MakerFram: Wrote stack traces to '[tombstoned]'

无计可施了,只能暂时用回5.15.2,QZXing先暂时不上,等仓主能修复这些问题^_^(或者有其他三方编译好的环境吗)

leamus avatar Feb 04 '24 01:02 leamus

难道androiddeployqt每一版都不一样吗。。。 官方的Qt是NDK22 我也不知道有没有其他人编译的版本,有的话也可以对比一下功能。。。。

Fsu0413 avatar Feb 04 '24 08:02 Fsu0413

不行的话我就更新一下android sdk吧,目前的5.15应该是用的2022年9月11日更新的SDK,platform也是用的21。。。

Fsu0413 avatar Feb 04 '24 08:02 Fsu0413

目前我只有你编译的版本(再次感谢),目前我下载了Qt6.6.1,想着要不试下最新版的编译试试,却一堆红色报错,还得做很多兼容工作。。所以仍然希望仓主你能编译出一个完美的android环境。。win版本我可以直接用MSYS,那个安装了可以直接用,也有静态版,可惜好像没安卓版(只带了个androiddeployqt.exe)

leamus avatar Feb 04 '24 11:02 leamus

我试试吧。。。。主要是这些问题我去查也没思路。。。。。。。 尤其是那个purchasing我觉得就是Qt代码本身的问题

Fsu0413 avatar Feb 04 '24 13:02 Fsu0413

辛苦啦,purchasing可以忽略,好像是关于商店还是支付的模块,基本也用不到。我是从Qt5.15.8开始直到现在这个版本用的,每个版本的安卓环境多多少少都有问题,主要是卡死和闪退,所以也没办法凑合用,官方带的5.15.2没啥大问题。等你编译好了我再试试^_^

leamus avatar Feb 05 '24 01:02 leamus

我用接近Qt官方的配置重新编了Qt 5.15 6.2 6.5的安卓版,希望能解决之前提到的种种问题吧。。。。。。

Fsu0413 avatar Feb 06 '24 23:02 Fsu0413

已经好了?我都迫不及待了哈哈,现在就试试

leamus avatar Feb 07 '24 01:02 leamus

很不幸,我全部清空再次编译还是报错: W Leamus_Android: qrc:/QML/menu.qml:664:5: Type Dialog1.FileDialog unavailable W MakerFrame: qrc:/QML/menu.qml:664:5: Type Dialog1.FileDialog unavailable W Leamus_Android: qrc:/android_rcc_bundle/qml/QtQuick/Dialogs/DefaultFileDialog.qml: No such file or directory W MakerFrame: qrc:/android_rcc_bundle/qml/QtQuick/Dialogs/DefaultFileDialog.qml: No such file or directory 哎,或许可能是Qt本身的bug,请仓主也别太在意,说不定下个版本就修了,因为之前的8、9、10版本确实没这个问题,希望继续加油~

leamus avatar Feb 07 '24 02:02 leamus

看错误应该是 QtQuick/Dialogs/DefaultFileDialog.qml 丢失(可能官方没加入到qrc文件中)。 我尝试把所有 QtQuick.Dialogs 替换为 Qt.labs.platform,它俩中都有一个FileDialog,功能差不多,所以程序是进去了,但仍然有很多问题: 1、全屏时界面高度仍然超出屏幕一个字的大小。 2、程序风格变了,我之前设置的是Material,看样子是没起作用。 3、整个界面感觉大了一倍。 4、操作一会就会闪退,报错:

F amus.MakerFram: java_vm_ext.cc:579] JNI DETECTED ERROR IN APPLICATION: JNI GetStaticMethodID called with pending exception java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable org.qtproject.qt5.android.CursorView.getDrawable()' on a null object reference F amus.MakerFram: java_vm_ext.cc:579] at int org.qtproject.qt5.android.CursorHandle.width() (CursorHandle.java:207) F amus.MakerFram: java_vm_ext.cc:579] at int org.qtproject.qt5.android.QtActivityDelegate.getSelectHandleWidth() (QtActivityDelegate.java:505) F amus.MakerFram: java_vm_ext.cc:579] at int org.qtproject.qt5.android.QtNative.getSelectHandleWidth() (QtNative.java:886) F amus.MakerFram: java_vm_ext.cc:579] at void org.qtproject.qt5.android.QtNative.startQtApplication() (QtNative.java:-2) F amus.MakerFram: java_vm_ext.cc:579] at void org.qtproject.qt5.android.QtNative$7.run() (QtNative.java:635) F amus.MakerFram: java_vm_ext.cc:579] at void org.qtproject.qt5.android.QtThread$1.run() (QtThread.java:61) F amus.MakerFram: java_vm_ext.cc:579] at void java.lang.Thread.run() (Thread.java:920) F amus.MakerFram: java_vm_ext.cc:579] F amus.MakerFram: java_vm_ext.cc:579] in call to GetStaticMethodID F amus.MakerFram: java_vm_ext.cc:579] from void org.qtproject.qt5.android.QtNative.startQtApplication() D WindowManager: Add to mViews: android.widget.PopupWindow$PopupDecorView{10479bd V.E...... R.....I. 0,0-0,0},pkg= cn.Leamus.MakerFrame F amus.MakerFram: runtime.cc:669] Runtime aborting... F amus.MakerFram: runtime.cc:669] Dumping all threads without mutator lock held F amus.MakerFram: runtime.cc:669] All threads: F amus.MakerFram: runtime.cc:669] DALVIK THREADS (36): F amus.MakerFram: runtime.cc:669] "qtMainLoopThread" prio=5 tid=19 Runnable

。。。

F amus.MakerFram: runtime.cc:669] at void org.qtproject.qt5.android.QtNative$7.run() (QtNative.java:635) F amus.MakerFram: runtime.cc:669] at void org.qtproject.qt5.android.QtThread$1.run() (QtThread.java:61) F amus.MakerFram: runtime.cc:669] at void java.lang.Thread.run() (Thread.java:920) F amus.MakerFram: runtime.cc:669] F amus.MakerFram: runtime.cc:677] JNI DETECTED ERROR IN APPLICATION: JNI GetStaticMethodID called with pending exception java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable org.qtproject.qt5.android.CursorView.getDrawable()' on a null object reference F amus.MakerFram: runtime.cc:677] at int org.qtproject.qt5.android.CursorHandle.width() (CursorHandle.java:207) F amus.MakerFram: runtime.cc:677] at int org.qtproject.qt5.android.QtActivityDelegate.getSelectHandleWidth() (QtActivityDelegate.java:505) F amus.MakerFram: runtime.cc:677] at int org.qtproject.qt5.android.QtNative.getSelectHandleWidth() (QtNative.java:886) F amus.MakerFram: runtime.cc:677] at void org.qtproject.qt5.android.QtNative.startQtApplication() (QtNative.java:-2) F amus.MakerFram: runtime.cc:677] at void org.qtproject.qt5.android.QtNative$7.run() (QtNative.java:635) F amus.MakerFram: runtime.cc:677] at void org.qtproject.qt5.android.QtThread$1.run() (QtThread.java:61) F amus.MakerFram: runtime.cc:677] at void java.lang.Thread.run() (Thread.java:920) F amus.MakerFram: runtime.cc:677] F amus.MakerFram: runtime.cc:677] in call to GetStaticMethodID F amus.MakerFram: runtime.cc:677] from void org.qtproject.qt5.android.QtNative.startQtApplication() D SurfaceComposerClient: VRR [FRTC] client handle [bufferId:18446744073709551615 framenumber:0] [ffffffff, ffffffff] I Quality : Skipped: false 1 cost 30.748959 refreshRate 0 processName cn.Leamus.MakerFrame F libc : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 6335 (qtMainLoopThrea), pid 6302 (amus.MakerFrame)

相比5.15.2来说,这个版本能解决了QZXing闪退问题。。。

我会继续等待下一个版本。。。

leamus avatar Feb 07 '24 03:02 leamus

哦对,补充两点: 1、咱这个编译的apk不支持安卓8安装了; 2、pc版本的DefaultFileDialog.qml文件存在,但是一直报错(但是可用):qt5/qml/QtQuick/Dialogs/DefaultFileDialog.qml:413:17: QML ToolButton: Binding loop detected for property "implicitHeight"

leamus avatar Feb 07 '24 03:02 leamus

不能安卓8安装我是没想到的。。。 其他bug如果真的是Qt的问题的话,那就是Qt商业版没有人花钱买安卓版。。。。。。。。

Fsu0413 avatar Feb 07 '24 11:02 Fsu0413

嗯,错误我忘了,好像是api level的问题。。 你那边还有5.15.3的安卓版吗?我想试试

leamus avatar Feb 07 '24 12:02 leamus

旧版我都直接删的,从来不留

Fsu0413 avatar Feb 08 '24 00:02 Fsu0413

了解,期望下一个版本~

leamus avatar Feb 08 '24 00:02 leamus

问题1确认是Qt Creator的问题, Qt Creator 12.0.2 解决了这个问题 https://bugreports.qt.io/browse/QTCREATORBUG-30146

Fsu0413 avatar Feb 11 '24 04:02 Fsu0413

刚刚看了安卓的开发文档,确认了不能安装到低版本安卓是因为我把NDK的API Level设置的过高导致的。 现有的Qt 5.15和6.2的API Level都是31(NDK r21版为30),6.5为33,而这些修改会因为依赖低版本没有的API而导致链接时失败。 下版本预计修改Qt 5.15为API Level 23(安卓6.0,相较原来提升了2),6.2为API Level 24(安卓7.0,复原),6.5为API Level 27(安卓8.1,复原),但是安卓SDK的build tools和platform保持不变。

这些修改预计于Qt 6.6.2发布时生效,并且届时重编所有Qt库。

Fsu0413 avatar Feb 14 '24 04:02 Fsu0413

最近我也遇到了API Level问题,而且有些问题运行时才去检查,一般我设置为21。如果改好能解决其他问题就再好不过了,期待~

leamus avatar Feb 15 '24 03:02 leamus

其他问题我觉得也不用指望我了。。。咱提交给Qt的权限仅限于开源分支

Fsu0413 avatar Feb 16 '24 00:02 Fsu0413

Qt5我只能指望你了^^,Qt6我大估计不会去用它了

leamus avatar Feb 19 '24 10:02 leamus

我看到13版本出来了,请问安卓环境是之前修改过的API Level变异的吗

leamus avatar Mar 13 '24 09:03 leamus

api level还原了

Fsu0413 avatar Mar 14 '24 08:03 Fsu0413

ok,回头测试一下再过来汇报^^

leamus avatar Mar 14 '24 09:03 leamus

先反馈一波:有1个坏消息和1个好消息和1个坏消息: 第一个坏消息是,purchasing仍然不能用,运行报错后闪退(无所谓了): W linker : "/data/app/cn.Leamus.MakerFrame-rr5pBUw96Vt1l3AdesuTDA==/lib/arm64/libc++_shared.so" unused DT entry: type 0x70000001 arg 0x0 I zygote64: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.billingclient.api.PurchasesUpdatedListener" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/cn.Leamus.MakerFrame-rr5pBUw96Vt1l3AdesuTDA==/base.apk"],nativeLibraryDirectories=[/data/app/cn.Leamus.MakerFrame-rr5pBUw96Vt1l3AdesuTDA==/lib/arm64, /data/app/cn.Leamus.MakerFrame-rr5pBUw96Vt1l3AdesuTDA==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /product/lib64]] E AndroidRuntime: Process: cn.Leamus.MakerFrame, PID: 4225 E AndroidRuntime: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/cn.Leamus.MakerFrame-rr5pBUw96Vt1l3AdesuTDA==/lib/arm64/libQt5Purchasing_arm64-v8a.so" W ActivityManager: Force finishing activity cn.Leamus.MakerFrame/cn.Leamus.MainActivity I ActivityManager: Process cn.Leamus.MakerFrame (pid 4225) has died: vis +99TOP 好消息是,我的引擎运行正常,大小什么的都没啥问题,看来确实是api level的设置问题; 还有一个坏消息是,我测试的途中闪退了一次,报错: W google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ### W google-breakpad: Chrome build fingerprint: W google-breakpad: 68.0.3440.91 W google-breakpad: 344009150 W google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ### F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x100 in tid 9801 (qtMainLoopThrea)

现在不清楚如何引起的(因为我现在也正在大修底层功能),等详细测试再来反馈~ 对了,我的环境是:NDK23.2(用android构建的NDK版本也是23)、Android build-tools 34、platform sdk android-34、Java17、Gradle8.6

leamus avatar Mar 15 '24 13:03 leamus

java 如果是Qt 5 的话,用8试试呢

Fsu0413 avatar Mar 15 '24 23:03 Fsu0413

java8不行,我用的gradle版本太高了,只能支持17,在Qt5.15.2中也没问题

leamus avatar Mar 16 '24 02:03 leamus

我都是用8编的,自始至终我都没用过17,就算是最新的Qt 6.6都没用17.。。。。。。。。 而且Qt 5我之前用的时候都是gradle 7.4.2。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Fsu0413 avatar Mar 16 '24 07:03 Fsu0413