2014-02-14 4 views
8

В моей текущей настройке сборки собственного кода Android APP_ABI определен в armeabi-v7a в Application.mk. Для некоторых из библиотек, которые я создаю, я вижу, что LOCAL_ARM_MODE определяется как рука в Android.mk.Флаг Android NDK и LOCAL_ARM_MODE

Мне нужно расширить эту установку, чтобы построить для x86. Из другого сообщения, похоже, использование «APP_ABI = all» является лучшим решением. Мне просто интересно, нужно ли изменить LOCAL_ARM_MODE. Что делает этот флаг в любом случае?

ответ

6

LOCAL_ARM_MODE может использоваться для определения платформы, на которую настроено ваше приложение. Чтобы ваши настройки Android.mk также для x86 просто включить необходимую информацию для вашего Android.mk файла - например .:

ifeq ($(TARGET_ARCH),arm) 
    LOCAL_CFLAGS := -mfpu=neon -march=armv6t2 -O9 
    LOCAL_SRC_FILES := engine-arm.s 
endif 
ifeq ($(TARGET_ARCH),x86) 
    LOCAL_CFLAGS := -msse2 -m32 -masm=intel 
    LOCAL_SRC_FILES := engine-x86.s 
endif 

Для получения дополнительной информации о различном варианте на определение вашей цели применения, загляните в /docs/Android-mk.

Источник: Compile assembly code for ARM and X86

2

Хотя это старый пост, я просто хочу отметить, что принятый ответ не является правильным.

LOCAL_ARM_MODE может быть установлен как «рука» или «большой палец» и по умолчанию используется «большой палец». «thumb» использует 16-битные инструкции, а «arm» использует 32-битные инструкции. 16-разрядные инструкции меньше, но могут быть медленными для некоторых критически важных приложений. Вот почему для некоторых библиотек люди специально устанавливают этот флаг на «руку», чтобы обеспечить сборку с помощью 32-разрядных инструкций. Конечно, этот флаг имеет смысл только тогда, когда вы строите для армейских архитектур.

С другой стороны, APP_ABI является правильным флагом для переключения, когда вы хотите построить для разных архитектур, таких как armeabi- * или x86 и многие другие.

Для получения дополнительной информации ознакомьтесь с документацией для Android.mk