Зачем использовать код armeabi-v7a поверх кода armeabi? - PullRequest
138 голосов
/ 16 августа 2011

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

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

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

Ответы [ 3 ]

156 голосов
/ 16 августа 2011

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

59 голосов
/ 19 февраля 2013

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 , многие вызовы функций будут выполняться быстрее.

5 голосов
/ 26 июня 2018

Вместо того, чтобы иметь толстый файл APK, я хотел бы использовать только файлы armeabi и удалить папку armeabi-v7a.

Противоположная - намного лучшая стратегия.Если у вас есть minSdkVersion до 14 и вы загрузили свой apk в игровой магазин, вы заметите, что будете поддерживать одинаковое количество устройств независимо от того, поддерживает ли вы armeabi или нет.Следовательно, не существует устройств с Android 4 или выше, которые бы выиграли бы от armeabi.

Возможно, поэтому Android NDK даже не поддерживает armeabi в соответствии с ревизией r17b.[ источник ]

...