Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Android NDK. Очень много ABI: armeabi, armeabi-v7a, arm64-v8a… Под какую из них реально стоит строить нативные .so-либы?

#android #android_sdk #android_ndk #arm


armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64...

Ну, armeabi - вроде понятно. Эта вроде архитектура на всех (или почти на всех) реальных
гаджетах.
x86 - вроде тоже понятно. Это прежде всего для Genymotion и прочих эмуляторов, где
Android x86.

А остальные?

Будет ли идеальным решением просто построить либу под все ABI? А если нет возможности
протестить везде, а только на x86 и armeabi?

И почему столько armов: armeabi, armeabi-v7a, arm64-v8a? Какой из них актуальнее?
Как определить, какой поддерживается моим гаджетом? Могут ли быть несколько сразу?
    


Ответы

Ответ 1



x86 - это прежде всего процессоры Intel Atom, которые установлены в немалое число реальных устройств, а не эмуляторы. Эмулятор, как раз может эмулировать любую архитектуру, независимо от архитектуры процессора, на котором хостится - на то он и эмулятор. Вы можете в этом убедится сами, посмотрев на список образов для эмуляции: Минимальным набором поддерживаемых архитектур является набор APP_ABI := x86 armeabi. Далее следует определиться, будет ли ваше приложение использовать дополнительные возможности архитектуры armeabi-v7a, например NEON - если это так, то данную архитектуру тоже следует включить в список (расширенный список инструкций arm-v7) - на самом деле, сейчас практически все ARM процессоры, как минимум v7 В последнее время устройства с процессорами на 64-ех битной архитектуре все чаще появляются в продаже, поэтому их тоже стоит учесть. Точно проигнорировать можно mips/mips64 Узнать, какая архитектура у вашего устройства, можно по спецификации процессора, который оно использует. Например, Qualcomm Snapdragon 820 - ARM-V8A. Так же в маркете можно найти программы, которые покажут системную информацию. Несколько архитектур ARM в одном процессоре быть не может, но каждая следующая включает предыдущую, то есть в ARM-V7 включен ARM, в ARM-V8 - ARM-V7. По факту, самая актуальная сейчас ARM-платформа - ARM-V7, на ней построено абсолютное большинство действующих процессоров, но ARM-V8 активно наступает. Разница в ARM-архитектурах очевидна, каждая следующая - шаг в эволюции, добавляются новые возможности на уровне железного ядра. Вы можете указать собрать библиотеку под все abi и это будет хорошим решением, если итоговый размер приложения вас устроит - каждая дополнительная платформа - новые файлы, которые имеют размер. Официальное руководство по этому вопросу.

Комментариев нет:

Отправить комментарий