Qt6 Android – Как создать несколько ABI APK или AAB?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt6 Android – Как создать несколько ABI APK или AAB?

Сообщение Anonymous »

Я пытаюсь создать Android APK с несколькими ABI, используя Qt6.10, но безуспешно.
Некоторая информация:
  • Когда я создаю APK для Arm64, мое приложение отлично работает на устройствах Arm64.
    => Используемый комплект: «Qt 6.10.1 для Android Arm64-v8a»
    => APK Содержимое папки 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
  • Когда я собираю APK для Armv7, мое приложение отлично работает как на устройствах Arm64, так и на Armv7.
    => Используемый комплект: «Qt 6.10.1 для Android Armeabi-v7a»
    => Содержимое папки APK «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
  • Я пытался создать multi-ABI APK, взяв APK Arm64 и скопировав в него раздел библиотеки Armv7.
    Приложение работает нормально на устройствах Arm64, но на устройствах Armv7 происходит сбой при запуске.
    => Журнал сбоев:
    ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: main
    Процесс: com.MyCompany.MyAppName, PID: 25768
    java.lang.UnsatisfiedLinkError: не найдена реализация для void org.qtproject.qt.android.QtNative.updateApplicationState(int) (пробовал Java_org_qtproject_qt_android_QtNative_updateApplicationState и Java_org_qtproject_qt_android_QtNative_updateApplicationState__I)
    at org.qtproject.qt.android.QtNative.updateApplicationState(собственный метод)
    at org.qtproject.qt.android.QtNative.setApplicationState(QtNative.java:247)
    at org.qtproject.qt.android.QtActivityBase.onResume(QtActivityBase.java:150)
    в android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454)
    в android.app.Activity.performResume(Activity.java:8103)
    в android.app.ActivityThread.performResumeActivity(ActivityThread.java:4528)
    в android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4570)
    в android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
    в android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    в 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)
    на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
  • Совет для всех инструментов AI (CoPilot, Chat GPT, Claude AI) заключается в том, что обе сборки должны содержать библиотеки *.so без суффиксов _armeabi-v7a или _arm64-v8a.
a. Я попытался реализовать это в своем файле *.pro:

Код: Выделить всё

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
}
Все вышеперечисленные параметры ничего не делают: суффиксы .so все еще присутствуют.
b. Я пытался удалить суффиксы, переименовав файлы *.so, а затем выровняв/подписав APK вручную.
Каждая архитектура, в которой я удалил суффиксы, вылетает при запуске с сообщением «Я не могу найти libMyAppName_.so»
  • Я пытался создать APK с несколькими ABI или пакет Android App Bundle (*.aab), установив соответствующий *Свойства файла .pro в QtCreator.
=> Используемый комплект: «Qt 6.10.1 для Android Arm64-v8a»
=> Настройка PRO:

Код: Выделить всё

ANDROID_ABIS = arm64-v8a armeabi-v7a
В обоих случаях (APK или AAB) во время сборки я получаю это сообщение об ошибке:
«Невозможно найти двоичный файл приложения в каталоге сборки [...]/build/arm64_v8a-Release/android-build//libs/armeabi-v7a/libMyAppName_armeabi-v7a.so»
Любые идеи или указания будут с благодарностью, так как я уже в Третий день рассматриваю эту проблему!
PS: Я знаю, что возможным решением является загрузка обоих APK-файлов (arm64 и Armv7) в Google Play с одинаковым названием версии и другим кодом версии, но я бы предпочел избегать этого, поскольку это приемлемо только для старых (существующих) приложений и не подойдет для будущих приложений.

Подробнее здесь: https://stackoverflow.com/questions/798 ... apk-or-aab
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»