В моем текущем проекте я использую несколько файлов .so. Они находятся в папках armeabi и armeabi-v7a. К сожалению, размер одного из файлов .so составляет 6 МБ, и мне нужно уменьшить размер файла. Вместо толстого APK-файла я хотел бы использовать только файлы armeabi и удалить папку armeabi-v7a.
Согласно документации NDK, код armeabi-v7a - это расширенный код armeabi, который может содержать дополнительные инструкции ЦП. Все это выходит за рамки моего опыта, но я сомневаюсь, почему нужно иметь и код armeabi-v7a, и код armeabi. Должна быть веская причина иметь и то, и другое, верно?
На моих тестовых устройствах все работает нормально. У них есть процессоры ARM v7. Можно ли предположить, что сейчас все работает?
android
android-ndk
arm
armv7
PaulT
источник
источник
armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Ответы:
Зависит от того, что делает ваш собственный код, но v7a поддерживает аппаратные операции с плавающей запятой, что имеет огромное значение. armeabi будет нормально работать на всех устройствах, но будет намного медленнее и не будет использовать возможности ЦП новых устройств. Сделайте несколько тестов для вашего конкретного приложения, но удаление двоичных файлов armeabi-v7a, как правило, не является хорошей идеей. Если вам нужно уменьшить размер, вы можете иметь два отдельных apks для старых (armeabi) и новых (armeabi-v7a) устройств.
источник
EABI = бинарный интерфейс встроенного приложения. Это такие спецификации, которым исполняемый файл должен соответствовать, чтобы выполняться в определенной среде выполнения. Он также определяет различные аспекты компиляции и связывания, необходимые для взаимодействия между инструментальными цепочками, используемыми для архитектуры ARM. В этом контексте, когда мы говорим об armeabi, мы говорим об архитектуре ARM и ОС GNU / Linux. Android следует за прямым порядком байтов ARM GNU / Linux ABI.
Приложение armeabi будет работать на ARMv5 (например, ARM9) и ARMv6 (например, ARM11). Вы можете использовать оборудование с плавающей запятой, если вы создаете свое приложение с использованием правильных опций GCC, таких как -mfpu = vfpv3 -mfloat-abi = softfp, который сообщает компилятору генерировать инструкции с плавающей запятой для оборудования VFP и включает соглашения о вызовах soft-float. armeabi не поддерживает соглашения о вызовах с жесткой плавающей запятой (это означает, что регистры FP не используются для хранения аргументов функции), но операции FP в HW все еще поддерживаются.
Приложение armeabi-v7a будет работать на устройствах Cortex A #, таких как Cortex A8, A9 и A15. Он поддерживает многоядерные процессоры и поддерживает -mfloat-abi = hard . Итак, если вы создаете свое приложение с помощью -mfloat-abi = hard , многие из ваших вызовов функций будут быстрее.
источник
The armeabi-v7a ABI uses the -mfloat-abi=softfp switch
. Так что вы подразумеваете под support -mfloat-abi = hard ?Противоположное - гораздо лучшая стратегия. Если вам нужно
minSdkVersion
14 и загрузите свой apk в игровой магазин, вы заметите, что будете поддерживать одинаковое количество устройств, независимо от того, поддерживаете вы этоarmeabi
или нет. Следовательно, нет устройств с Android 4 и выше, от которых можно было бы выигратьarmeabi
.Вероятно, поэтому Android NDK даже
armeabi
больше не поддерживает версию r17b. [ источник ]источник