You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Qt6.10构建多ABI Android APK/AAB失败的问题求助

Qt6.10构建多ABI Android APK/AAB失败的问题求助

各位大佬,我卡在Qt6.10构建多ABI Android APK的问题上已经3天了,试了各种方法都没解决,想请教下有没有遇到过类似问题的朋友给点思路?

先跟大家说下我目前的测试情况:

1. 单独构建单一ABI的情况(均正常)

构建arm64-v8a APK

  • 使用Kit:Qt 6.10.1 for Android arm64-v8a
  • 生成的APK的lib目录仅包含arm64-v8a架构的库文件,示例如下:
    lib/arm64-v8a/libMyAppName_arm64-v8a.so
    lib/arm64-v8a/libplugins_iconengines_qsvgicon_arm64-v8a.so
    ...
    lib/arm64-v8a/libQt6Core_arm64-v8a.so
    
  • 在arm64设备上运行完全正常

构建armeabi-v7a APK

  • 使用Kit:Qt 6.10.1 for Android armeabi-v7a
  • 生成的APK的lib目录仅包含armeabi-v7a架构的库文件,示例如下:
    lib/armeabi-v7a/libMyAppName_armeabi-v7a.so
    lib/armeabi-v7a/libplugins_iconengines_qsvgicon_armeabi-v7a.so
    ...
    lib/armeabi-v7a/libQt6Core_armeabi-v7a.so
    
  • 意外发现:这个APK在arm64和armv7设备上都能正常运行,没有任何兼容性问题

2. 手动合并APK的尝试(失败)

我想着手动合并两个单一ABI的APK,操作步骤是:解压arm64的APK,把armv7的lib/armeabi-v7a目录整个复制进去,然后重新打包签名。

结果:

  • arm64设备运行正常
  • armv7设备启动直接崩溃,崩溃日志如下:
FATAL EXCEPTION: main
Process: com.MyCompany.MyAppName, PID: 25768
java.lang.UnsatisfiedLinkError: No implementation found for void org.qtproject.qt.android.QtNative.updateApplicationState(int) (tried Java_org_qtproject_qt_android_QtNative_updateApplicationState and Java_org_qtproject_qt_android_QtNative_updateApplicationState__I)
at org.qtproject.qt.android.QtNative.updateApplicationState(Native Method)
at org.qtproject.qt.android.QtNative.setApplicationState(QtNative.java:247)
at org.qtproject.qt.android.QtActivityBase.onResume(QtActivityBase.java:150)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454)
at android.app.Activity.performResume(Activity.java:8103)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4528)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4570)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7948)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

3. 通过pro文件配置多ABI的尝试(失败)

我想着应该用Qt官方支持的方式构建,于是在pro文件中配置多ABI:
用arm64的Kit,添加如下配置:

android {
    ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

    ANDROID_MIN_SDK_VERSION = "28"
    ANDROID_TARGET_SDK_VERSION= "35"

    # 按照AI建议尝试去掉ABI后缀,无效果
    CONFIG -= android_abi_suffix
    # 强制指定目标文件名,也无效果
    TARGET = myAppName

    # 配置多ABI
    ANDROID_ABIS = arm64-v8a armeabi-v7a
}

结果不管是构建APK还是AAB,都会出现以下错误:

Cannot find application binary in build dir [...]/build/arm64_v8a-Release/android-build//libs/armeabi-v7a/libMyAppName_armeabi-v7a.so

4. 已知临时方案,但不想依赖

我知道可以将两个单一ABI的APK(版本名相同、版本号不同)上传到Google Play,但这个方案仅Google仅允许现有旧应用使用,未来新应用可能不再支持,而且总觉得这不是正确的解决路径,所以不想依赖这个临时方案。

有没有大佬知道问题出在哪?或者有没有正确构建Qt6.10多ABI Android APK的方法?感激不尽!

火山引擎 最新活动