Так и не нашёл информации. После обновления до Android 14 в приложении при первом запуске вылезает диалог "Это приложение не совместимо с последней версией Android. Проверьте наличие обновлений или свяжитесь с разработчиком приложения." При этом приложение работает без проблем.
Да, именно так. При targetSdkVersion 28 Android позволял поддерживать только armeabi-v7a, и многие устройства нормально запускали такие приложения. Однако начиная с более высоких версий (включая targetSdkVersion 35 и Android 14), Google усиливает требования к 64-битной совместимости. Поэтому, если приложение содержит только 32-битный код (armeabi-v7a), оно может считаться несовместимым на устройствах, которые требуют 64-битные библиотеки (например, arm64-v8a).
Чтобы решить проблему, нужно добавить поддержку 64-битной архитектуры (arm64-v8a) в проект.
Да, при targetSdkVersion 28 устройства с 64-битными процессорами могли эмулировать 32-битные библиотеки (armeabi-v7a), и приложение работало без проблем. Однако с новыми требованиями (начиная с targetSdkVersion 29 и выше) эмуляция 32-битных библиотек на 64-битных устройствах больше не поддерживается. Теперь приложения должны предоставлять 64-битные версии библиотек (например, arm64-v8a), иначе они считаются несовместимыми с устройствами, которые требуют 64-битный код.
Это связано с политикой Google по улучшению производительности и безопасности приложений на новых устройствах.
Да, вывод в том, что нужно сбилдить нативный код для 64-битной архитектуры, такой как arm64-v8a, чтобы ваше приложение было совместимо с новыми требованиями Android (targetSdkVersion 35). Это позволит вашему приложению работать на устройствах с 64-битными процессорами.
Вот что нужно сделать:
Добавить поддержку arm64-v8a в build.gradle:
groovy
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Собрать нативные библиотеки (NDK) для arm64-v8a: Убедитесь, что ваш проект NDK поддерживает 64-битную архитектуру. В CMake или ndk-build настройте сборку для arm64-v8a.
Это решит проблему совместимости на устройствах с 64-битными процессорами.
===
Если у вас нет исходников нативного кода, и вы пытаетесь просто скопировать библиотеки для armeabi-v7a в другие папки (например, arm64-v8a), это не решит проблему. Android требует наличия нативных библиотек, скомпилированных специально для 64-битной архитектуры, чтобы приложение могло корректно работать на устройствах с 64-битными процессорами.
Подкидывание armeabi-v7a библиотек в папки для arm64-v8a не будет работать, так как система будет ожидать 64-битные библиотеки для arm64-v8a, и это вызовет ошибки или падения приложения при запуске.
Возможные решения:
Найти исходный нативный код и пересобрать его для 64-битной архитектуры.
Найти 64-битные версии библиотек, если они доступны от разработчика нативного кода.
Отключить поддержку 64-битных устройств, но это не рекомендуется и может привести к ограничению распространения приложения, так как Google Play требует поддержку 64-битных архитектур для targetSdkVersion 30 и выше.
К сожалению, без 64-битной версии нативных библиотек ваше приложение не будет работать на современных устройствах с 64-битными процессорами.
Для покупки устройства для Android разработки, выбор процессора зависит от целей и требований приложения:
arm64-v8a (64-битный ARM процессор)
Рекомендуется для большинства современных устройств. Практически все Android устройства с 2019 года имеют 64-битные процессоры. Google требует поддержки 64-битных архитектур для приложений с targetSdkVersion 29 и выше, и это становится стандартом.
Поддерживает как 64-битные (arm64-v8a), так и 32-битные (armeabi-v7a) приложения, поэтому это наиболее универсальный выбор для разработки.
armeabi-v7a (32-битный ARM процессор)
Устаревший процессор, используется на старых устройствах или некоторых бюджетных моделях. Если ваше приложение должно поддерживать старые устройства, это может быть полезным.
Однако, многие новые устройства и версии Android (особенно Android 14 и выше) могут больше не поддерживать чисто 32-битные приложения.
x86 и x86_64
x86 (32-битный Intel процессор) встречается крайне редко на современных Android устройствах. Ранее использовался на некоторых планшетах и устройствах от Intel, но уже практически не актуален.
x86_64 (64-битный Intel процессор) также не очень распространен среди мобильных устройств. В основном встречается на эмуляторах и некоторых специализированных устройствах. Могут возникнуть сложности с поддержкой nativных библиотек, если приложение целится на ARM-устройства.
Вывод:
Если нужна универсальность и совместимость с большинством современных устройств: выбирайте устройство с arm64-v8a процессором. Оно поддерживает как 64-битные, так и 32-битные приложения.
Если вы тестируете старые приложения с 32-битной поддержкой: можно рассмотреть устройство с armeabi-v7a, но такие устройства становятся всё реже.
Для эмуляции или разработки специфичных приложений под Intel: устройства с x86_64, но для реальных пользователей они почти не используются.
Таким образом, arm64-v8a — оптимальный выбор для большинства задач разработки.
====
Для игр, особенно современных и требовательных к производительности, лучше всего подойдут устройства с arm64-v8a (64-битные ARM процессоры). Вот почему:
Высокая производительность: Большинство современных игр оптимизировано для работы на 64-битных процессорах, которые обеспечивают лучшую производительность и более эффективное использование памяти.
Поддержка современных игр: Многие игровые разработчики ориентируются на устройства с arm64-v8a, так как они составляют подавляющее большинство новых Android устройств.
Будущая совместимость: Устройства с arm64-v8a продолжают поддерживать как 64-битные, так и 32-битные игры (armeabi-v7a), что делает их совместимыми с более старыми играми.
Причины избегать других процессоров:
armeabi-v7a (32-битные устройства): Старые и менее производительные. Современные игры могут на них плохо работать или вовсе не запускаться, особенно с выходом новых версий Android (например, Android 14).
x86 и x86_64: В основном используются в эмуляторах и редко встречаются на мобильных устройствах. Игры на них могут не быть так хорошо оптимизированы.
Вывод:
Лучший выбор для игр: устройство с arm64-v8a. Это самый распространённый тип процессоров, обеспечивающий отличную производительность для современных игр и поддержку старых.
PS. Также есть ограничение GooglePlay на распостранение 32-битных приложений
и targetSdk не ниже 33
Пример обхода на Google Play
Комментариев нет:
Отправить комментарий