Будет ли Android автоматически загружать «лучший» .so файл для устройства? - PullRequest
0 голосов
/ 14 ноября 2011

Я пишу приложение, которому нужен код JNI.Этот код включает в себя обработку с плавающей запятой, поэтому я хочу, чтобы он был максимально быстрым.Поэтому я хочу поддерживать архитектуры ARM5 и ARM7.В моем Application.mk написано:

APP_ABI := all

... и процесс сборки компилирует модуль для ARM5, ARM7 и x86.Я проверил, что все .so файлы попадают в файл .apk.

Теперь вопрос: будет ли Android автоматически загружать «лучший» .so файл в зависимости от платформы, на которой он работает?Другими словами: будет ли он загружать модуль ARM5 на устройства ARM5 и ARM7 на устройства ARM7?

1 Ответ

1 голос
/ 07 февраля 2012

Да.

На устройстве ARMv5 или ARMv6 (CPU) будет использоваться двоичный файл ARMv5 (APP_ABI = armeabi) На устройстве ARMv7 система увидит, что двоичный файл ARMv7 доступен, и будет использовать его(APP_ABI = armeabi-v7a)

В документации NDK мы можем прочитать:

III.2. Android Platform ABI support:
------------------------------------

The Android system knows at runtime which ABI(s) it supports. More
precisely, up to two build-specific system properties are used to
indicate:

- the 'primary' ABI for the device, corresponding to the machine
  code used in the system image itself.

- an optional 'secondary' ABI, corresponding to another ABI that
  is also supported by the system image.

For example, a typical ARMv5TE-based device would only define
the primary ABI as 'armeabi' and not define a secondary one.

On the other hand, a typical ARMv7-based device would define the
primary ABI to 'armeabi-v7a' and the secondary one to 'armeabi'
since it can run application native binaries generated for both
of them.

A typical x86-based device only defines a primary abi named 'x86'.
...