Android NDK и локальный флаг режима ARM

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

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

2 ответов


LOCAL_ARM_MODE можно использовать для определения платформы, на которую нацелено приложение. Чтобы иметь свой Android.Mk setup также для 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.

источник: скомпилировать код сборки для ARM и X86


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

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

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

для получения дополнительной информации прочитайте документацию для Android.МК