Зачем использовать код armeabi-v7a по кодексу армейцев?

В моем текущем проекте я использую несколько файлов .so. Они расположены в папке armeabi и armeabi-v7a. К сожалению, один из файлов .so - это 6 МБ, и мне нужно уменьшить размер файла. Вместо того, чтобы иметь жирный файл APK, я хотел бы использовать только файлы armeabi и удалить папку armeabi-v7a.

Согласно документации NDK, код armeabi-v7a - это расширенный код armeabi, который может содержать дополнительные инструкции CPU. Все это выходит за рамки моего опыта, но я сомневаюсь, почему бы хотелось иметь код armeabi-v7a и armeabi. Должна быть веская причина иметь оба, правильно?

На моих тестовых устройствах все это работает нормально. У них есть процессор ARM v7. Можно ли предположить, что все работает сейчас?

4b9b3361

Зависит от того, что делает ваш собственный код, но v7a имеет поддержку аппаратных операций с плавающей запятой, что имеет огромное значение. armeabi отлично работает на всех устройствах, но будет намного медленнее и не будет использовать возможности процессора более новых устройств. Выполните некоторые тесты для своего конкретного приложения, но удаление двоичных файлов armeabi-v7a обычно не является хорошей идеей. Если вам нужно уменьшить размер, вы можете захотеть иметь два отдельных apks для более старых (armeabi) и более новых (armeabi-v7a) устройств.

138
ответ дан 16 авг. '11 в 20:07
источник

EABI = двоичный интерфейс встроенного приложения. Это такие спецификации, которым исполняемый файл должен соответствовать для выполнения в конкретной среде исполнения. В нем также указаны различные аспекты компиляции и связи, необходимые для взаимодействия между инструментальными цепочками, используемыми для архитектуры ARM. В этом контексте, когда мы говорим о armeabi, мы говорим о архитектуре ARM и GNU/Linux OS. 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, многие ваши вызовы функций будут быстрее.

55
ответ дан 19 февр. '13 в 13:43
источник