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