Qt6 Android – Wie erstellt man Multi-ABI APK oder AAB?C++

Programme in C++. Entwicklerforum
Anonymous
 Qt6 Android – Wie erstellt man Multi-ABI APK oder AAB?

Post by Anonymous »

Ich versuche erfolglos, ein Multi-ABI-Android-APK mit Qt6.10 zu erstellen.
Einige Informationen:
  • Wenn ich das APK für arm64 erstelle, funktioniert meine App einwandfrei auf arm64-Geräten.
    => Verwendetes Kit: „Qt 6.10.1 für Android arm64-v8a“
    => APK Inhalt des Ordners „lib“:
    lib\ arm64-v8a\libMyAppName_arm64-v8a.so
    lib\ arm64-v8a\libplugins_iconengines_qsvgicon_arm64-v8a.so
    lib\ arm64-v8a\libplugins_imageformats_qgif_arm64-v8a.so
    [...]
    lib\ arm64-v8a\libqml_QtQml_Models_modelsplugin_arm64-v8a.so
    [...]
    lib\ arm64-v8a\libQt6Core_arm64-v8a.so
  • Wenn ich das APK für armv7 erstelle, funktioniert meine App sowohl auf arm64- als auch auf armv7-Geräten einwandfrei.
    => Verwendetes Kit: „Qt 6.10.1 für Android armeabi-v7a“
    => Inhalt des APK-Ordners „lib“:
    lib\armeabi-v7a\libMyAppName_armeabi-v7a.so
    lib\armeabi-v7a\libplugins_iconengines_qsvgicon_armeabi-v7a.so
    lib\armeabi-v7a\libplugins_imageformats_qgif_armeabi-v7a.so
    [...]
    lib\armeabi-v7a\libqml_QtQml_Models_modelsplugin_armeabi-v7a.so
    [...]
    lib\armeabi-v7a\libQt6Core_armeabi-v7a.so
  • Ich habe versucht, ein Multi-ABI-APK zu erstellen, indem ich das arm64-APK genommen und den armv7-Lib-Abschnitt darin kopiert habe.
    Die App funktioniert gut auf arm64-Geräten, aber auf armv7-Geräten es stürzt beim Start ab.
    => Absturzprotokoll:
    FATAL EXCEPTION: main
    Prozess: com.MyCompany.MyAppName, PID: 25768
    java.lang.UnsatisfiedLinkError: Keine Implementierung gefunden für void org.qtproject.qt.android.QtNative.updateApplicationState(int) (versucht Java_org_qtproject_qt_android_QtNative_updateApplicationState und 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)
    bei org.qtproject.qt.android.QtActivityBase.onResume(QtActivityBase.java:150)
    bei android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454)
    bei android.app.Activity.performResume(Activity.java:8103)
    bei android.app.ActivityThread.performResumeActivity(ActivityThread.java:4528)
    bei android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4570)
    bei android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
    bei android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
    bei android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    bei android.app.ActivityThread$H.handleMessage(ActivityThread.java:2216)
    bei android.os.Handler.dispatchMessage(Handler.java:107)
    bei android.os.Looper.loop(Looper.java:237)
    bei android.app.ActivityThread.main(ActivityThread.java:7948)
    bei 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)
  • Der Rat aller KI-Tools (CoPilot, Chat GPT, Claude AI) ist, dass beide Builds *.so-Bibliotheken ohne die Suffixe _armeabi-v7a oder _arm64-v8a enthalten müssen.
a. Ich habe versucht, dies in meiner *.pro-Datei durchzusetzen:

Code: Select all

android {
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

ANDROID_MIN_SDK_VERSION = "28"   # (Android 9) is the min Android API Supported by Qt 6.x
ANDROID_TARGET_SDK_VERSION= "35"   # (Android 15) is the min acceptable from Google Play (since 1/11/2025)

# This prevents Qt from adding the ABI suffix?
# (is not not working, probably an AI halucination)
CONFIG -= android_abi_suffix

# Force target name (redundant but ensures no suffix? - NOT!)
TARGET = myAppName
}
Alle oben genannten Parameter bewirken nichts: Die .so-Suffixe sind immer noch vorhanden.
b. Ich habe versucht, die Suffixe durch Umbenennen der *.so-Dateien zu entfernen und dann das APK manuell auszurichten/signieren.
Jede Architektur, bei der ich die Suffixe entfernt habe, stürzt beim Start mit der Meldung „Ich kann libMyAppName_.so nicht finden“ ab.
  • Ich habe versucht, ein Multi-ABI-APK oder ein Android App Bundle (*.aab) zu erstellen, indem ich das entsprechende *.pro festgelegt habe Dateieigenschaften in QtCreator.
=> Verwendetes Kit: „Qt 6.10.1 für Android arm64-v8a“
=> PRO-Einstellung:

Code: Select all

ANDROID_ABIS = arm64-v8a armeabi-v7a
In beiden Fällen (APK oder AAB) erhalte ich diese Fehlermeldung während des Builds:
„Anwendungsbinärdatei kann im Build-Verzeichnis nicht gefunden werden [...]/build/arm64_v8a-Release/android-build//libs/armeabi-v7a/libMyAppName_armeabi-v7a.so“
Alle Ideen oder Hinweise sind sehr willkommen, da ich bereits am dritten Tag auf der Suche bin zu diesem Problem!
PS: Ich weiß, dass eine mögliche Problemumgehung darin besteht, beide APKs (arm64 und armv7) mit demselben Versionsnamen und unterschiedlichem Versionscode in Google Play hochzuladen, aber ich würde es lieber vermeiden, da dies nur für alte (bestehende) Apps akzeptabel ist und keine Lösung für zukünftige Apps darstellt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post